mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-15 12:13:54 -07:00
Update CraftBukkit to Minecraft 1.7.8
This commit is contained in:
@@ -6,11 +6,11 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import net.minecraft.server.BanEntry;
|
||||
import net.minecraft.server.EntityPlayer;
|
||||
import net.minecraft.server.NBTTagCompound;
|
||||
import net.minecraft.server.WorldNBTStorage;
|
||||
|
||||
import net.minecraft.util.com.mojang.authlib.GameProfile;
|
||||
import org.bukkit.BanList;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
@@ -24,14 +24,19 @@ import org.bukkit.plugin.Plugin;
|
||||
|
||||
@SerializableAs("Player")
|
||||
public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializable {
|
||||
private final String name;
|
||||
private final GameProfile profile;
|
||||
private final CraftServer server;
|
||||
private final WorldNBTStorage storage;
|
||||
|
||||
protected CraftOfflinePlayer(CraftServer server, String name) {
|
||||
protected CraftOfflinePlayer(CraftServer server, GameProfile profile) {
|
||||
this.server = server;
|
||||
this.name = name;
|
||||
this.profile = profile;
|
||||
this.storage = (WorldNBTStorage) (server.console.worlds.get(0).getDataManager());
|
||||
|
||||
}
|
||||
|
||||
public GameProfile getProfile() {
|
||||
return profile;
|
||||
}
|
||||
|
||||
public boolean isOnline() {
|
||||
@@ -39,86 +44,96 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
// TODO: In 1.7.6+ OfflinePlayer lookup should be by UUID and store it like it does the name now
|
||||
public UUID getUniqueId() {
|
||||
NBTTagCompound data = getData();
|
||||
if (data == null) {
|
||||
return null;
|
||||
Player player = getPlayer();
|
||||
if (player != null) {
|
||||
return player.getName();
|
||||
}
|
||||
|
||||
if (data.hasKeyOfType("UUIDMost", 4) && data.hasKeyOfType("UUIDLeast", 4)) {
|
||||
return new UUID(data.getLong("UUIDMost"), data.getLong("UUIDLeast"));
|
||||
NBTTagCompound data = getBukkitData();
|
||||
|
||||
if (data != null) {
|
||||
if (data.hasKey("lastKnownName")) {
|
||||
return data.getString("lastKnownName");
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public UUID getUniqueId() {
|
||||
return profile.getId();
|
||||
}
|
||||
|
||||
public Server getServer() {
|
||||
return server;
|
||||
}
|
||||
|
||||
public boolean isOp() {
|
||||
return server.getHandle().isOp(getName().toLowerCase());
|
||||
return server.getHandle().isOp(profile);
|
||||
}
|
||||
|
||||
public void setOp(boolean value) {
|
||||
if (value == isOp()) return;
|
||||
if (value == isOp()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (value) {
|
||||
server.getHandle().addOp(getName().toLowerCase());
|
||||
server.getHandle().addOp(profile);
|
||||
} else {
|
||||
server.getHandle().removeOp(getName().toLowerCase());
|
||||
server.getHandle().removeOp(profile);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isBanned() {
|
||||
return server.getBanList(BanList.Type.NAME).isBanned(getName());
|
||||
return server.getBanList(BanList.Type.UUID).isBanned(getUniqueId().toString());
|
||||
}
|
||||
|
||||
public void setBanned(boolean value) {
|
||||
if (value) {
|
||||
server.getBanList(BanList.Type.NAME).addBan(getName(), null, null, null);
|
||||
server.getBanList(BanList.Type.UUID).addBan(getUniqueId().toString(), null, null, null);
|
||||
} else {
|
||||
server.getBanList(BanList.Type.NAME).pardon(getName());
|
||||
server.getBanList(BanList.Type.UUID).pardon(getUniqueId().toString());
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isWhitelisted() {
|
||||
return server.getHandle().getWhitelisted().contains(name.toLowerCase());
|
||||
return server.getHandle().isWhitelisted(profile);
|
||||
}
|
||||
|
||||
public void setWhitelisted(boolean value) {
|
||||
if (value) {
|
||||
server.getHandle().addWhitelist(name.toLowerCase());
|
||||
server.getHandle().addWhitelist(profile);
|
||||
} else {
|
||||
server.getHandle().removeWhitelist(name.toLowerCase());
|
||||
server.getHandle().removeWhitelist(profile);
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, Object> serialize() {
|
||||
Map<String, Object> result = new LinkedHashMap<String, Object>();
|
||||
|
||||
result.put("name", name);
|
||||
result.put("UUID", profile.getId().toString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static OfflinePlayer deserialize(Map<String, Object> args) {
|
||||
return Bukkit.getServer().getOfflinePlayer((String) args.get("name"));
|
||||
// Backwards comparability
|
||||
if (args.get("name") != null) {
|
||||
return Bukkit.getServer().getOfflinePlayer((String) args.get("name"));
|
||||
}
|
||||
|
||||
return Bukkit.getServer().getOfflinePlayer(UUID.fromString((String) args.get("UUID")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getClass().getSimpleName() + "[name=" + name + "]";
|
||||
return getClass().getSimpleName() + "[UUID=" + profile.getId() + "]";
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
for (Object obj : server.getHandle().players) {
|
||||
EntityPlayer player = (EntityPlayer) obj;
|
||||
if (player.getName().equalsIgnoreCase(getName())) {
|
||||
if (player.getUniqueID().equals(getUniqueId())) {
|
||||
return (player.playerConnection != null) ? player.playerConnection.getPlayer() : null;
|
||||
}
|
||||
}
|
||||
@@ -128,28 +143,27 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (!(obj instanceof OfflinePlayer)) {
|
||||
if (obj == null || !(obj instanceof OfflinePlayer)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
OfflinePlayer other = (OfflinePlayer) obj;
|
||||
if ((this.getName() == null) || (other.getName() == null)) {
|
||||
if ((this.getUniqueId() == null) || (other.getUniqueId() == null)) {
|
||||
return false;
|
||||
}
|
||||
return this.getName().equalsIgnoreCase(other.getName());
|
||||
|
||||
return this.getUniqueId().equals(other.getUniqueId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 5;
|
||||
hash = 97 * hash + (this.getName() != null ? this.getName().toLowerCase().hashCode() : 0);
|
||||
hash = 97 * hash + (this.getUniqueId() != null ? this.getUniqueId().toString().hashCode() : 0);
|
||||
return hash;
|
||||
}
|
||||
|
||||
private NBTTagCompound getData() {
|
||||
return storage.getPlayerData(getName());
|
||||
return storage.getPlayerData(getUniqueId().toString());
|
||||
}
|
||||
|
||||
private NBTTagCompound getBukkitData() {
|
||||
@@ -166,7 +180,7 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa
|
||||
}
|
||||
|
||||
private File getDataFile() {
|
||||
return new File(storage.getPlayerDir(), name + ".dat");
|
||||
return new File(storage.getPlayerDir(), getUniqueId() + ".dat");
|
||||
}
|
||||
|
||||
public long getFirstPlayed() {
|
||||
|
Reference in New Issue
Block a user