diff options
Diffstat (limited to 'src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java')
-rw-r--r-- | src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java | 140 |
1 files changed, 81 insertions, 59 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index bbf310b0..286a58c2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1,12 +1,14 @@ package org.bukkit.craftbukkit.entity; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.MapMaker; +import com.mojang.authlib.GameProfile; +import io.netty.buffer.Unpooled; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketAddress; +import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.LinkedHashMap; @@ -19,7 +21,6 @@ import java.util.logging.Logger; import net.minecraft.server.*; -import net.minecraft.util.com.mojang.authlib.GameProfile; import org.apache.commons.lang.Validate; import org.apache.commons.lang.NotImplementedException; import org.bukkit.*; @@ -53,6 +54,7 @@ import org.bukkit.event.player.PlayerRegisterChannelEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerUnregisterChannelEvent; import org.bukkit.inventory.InventoryView.Property; +import org.bukkit.map.MapCursor; import org.bukkit.map.MapView; import org.bukkit.metadata.MetadataValue; import org.bukkit.plugin.Plugin; @@ -174,44 +176,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public String getPlayerListName() { - return getHandle().listName; + return CraftChatMessage.fromComponent(getHandle().listName); } @Override public void setPlayerListName(String name) { - String oldName = getHandle().listName; - if (name == null) { name = getName(); } - - if (oldName.equals(name)) { - return; - } - - if (name.length() > 16) { - throw new IllegalArgumentException("Player list names can only be a maximum of 16 characters long"); - } - - // Collisions will make for invisible people - for (int i = 0; i < server.getHandle().players.size(); ++i) { - if (((EntityPlayer) server.getHandle().players.get(i)).listName.equals(name)) { - throw new IllegalArgumentException(name + " is already assigned as a player list name for someone"); - } - } - - getHandle().listName = name; - - // Change the name on the client side - PacketPlayOutPlayerInfo oldpacket = new PacketPlayOutPlayerInfo(oldName, false, 9999); - PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(name, true, getHandle().ping); - for (int i = 0; i < server.getHandle().players.size(); ++i) { - EntityPlayer entityplayer = (EntityPlayer) server.getHandle().players.get(i); - if (entityplayer.playerConnection == null) continue; - - if (entityplayer.getBukkitEntity().canSee(this)) { - entityplayer.playerConnection.sendPacket(oldpacket); - entityplayer.playerConnection.sendPacket(packet); + getHandle().listName = name.equals(getName()) ? null : CraftChatMessage.fromString(name)[0]; + for (EntityPlayer player : (List<EntityPlayer>)server.getHandle().players) { + if (player.getBukkitEntity().canSee(this)) { + player.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.UPDATE_DISPLAY_NAME, getHandle())); } } } @@ -248,7 +224,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (getHandle().playerConnection == null) return; // Do not directly assign here, from the packethandler we'll assign it. - getHandle().playerConnection.sendPacket(new PacketPlayOutSpawnPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); + getHandle().playerConnection.sendPacket(new PacketPlayOutSpawnPosition(new BlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()))); } @Override @@ -343,7 +319,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (getHandle().playerConnection == null) return; int packetData = effect.getId(); - PacketPlayOutWorldEvent packet = new PacketPlayOutWorldEvent(packetData, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), data, false); + PacketPlayOutWorldEvent packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()), data, false); getHandle().playerConnection.sendPacket(packet); } @@ -368,10 +344,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void sendBlockChange(Location loc, int material, byte data) { if (getHandle().playerConnection == null) return; - PacketPlayOutBlockChange packet = new PacketPlayOutBlockChange(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), ((CraftWorld) loc.getWorld()).getHandle()); + PacketPlayOutBlockChange packet = new PacketPlayOutBlockChange(((CraftWorld) loc.getWorld()).getHandle(), new BlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); - packet.block = CraftMagicNumbers.getBlock(material); - packet.data = data; + packet.block = CraftMagicNumbers.getBlock(material).fromLegacyData(data); getHandle().playerConnection.sendPacket(packet); } @@ -390,10 +365,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player { throw new IllegalArgumentException("Must have at least 4 lines"); } - // Limit to 15 chars per line and set null lines to blank - String[] astring = CraftSign.sanitizeLines(lines); + IChatBaseComponent[] components = CraftSign.sanitizeLines(lines); - getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateSign(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), astring)); + getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateSign(getHandle().world, new BlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()), components)); } @Override @@ -435,15 +409,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (getHandle().playerConnection == null) return; RenderData data = ((CraftMapView) map).render(this); - for (int x = 0; x < 128; ++x) { - byte[] bytes = new byte[131]; - bytes[1] = (byte) x; - for (int y = 0; y < 128; ++y) { - bytes[y + 3] = data.buffer[y * 128 + x]; + Collection<MapIcon> icons = new ArrayList<MapIcon>(); + for (MapCursor cursor : data.cursors) { + if (cursor.isVisible()) { + icons.add(new MapIcon(cursor.getRawType(), cursor.getX(), cursor.getY(), cursor.getDirection())); } - PacketPlayOutMap packet = new PacketPlayOutMap(map.getId(), bytes); - getHandle().playerConnection.sendPacket(packet); } + + PacketPlayOutMap packet = new PacketPlayOutMap(map.getId(), map.getScale().getValue(), icons, data.buffer, 0, 0, 0, 0); + getHandle().playerConnection.sendPacket(packet); } @Override @@ -455,7 +429,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } if (entity.playerConnection == null || entity.playerConnection.isDisconnected()) { - return false; + return false; } if (entity.passenger != null) { @@ -781,7 +755,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (event.isCancelled()) { return; } - + + getHandle().e((Entity) getHandle()); // RENAME getHandle().playerInteractManager.setGameMode(EnumGamemode.getById(mode.getValue())); getHandle().fallDistance = 0; getHandle().playerConnection.sendPacket(new PacketPlayOutGameStateChange(3, mode.getValue())); @@ -793,90 +768,108 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return GameMode.getByValue(getHandle().playerInteractManager.getGameMode().getId()); } + @Override public void giveExp(int exp) { getHandle().giveExp(exp); } + @Override public void giveExpLevels(int levels) { getHandle().levelDown(levels); } + @Override public float getExp() { return getHandle().exp; } + @Override public void setExp(float exp) { getHandle().exp = exp; getHandle().lastSentExp = -1; } + @Override public int getLevel() { return getHandle().expLevel; } + @Override public void setLevel(int level) { getHandle().expLevel = level; getHandle().lastSentExp = -1; } + @Override public int getTotalExperience() { return getHandle().expTotal; } + @Override public void setTotalExperience(int exp) { getHandle().expTotal = exp; } + @Override public float getExhaustion() { return getHandle().getFoodData().exhaustionLevel; } + @Override public void setExhaustion(float value) { getHandle().getFoodData().exhaustionLevel = value; } + @Override public float getSaturation() { return getHandle().getFoodData().saturationLevel; } + @Override public void setSaturation(float value) { getHandle().getFoodData().saturationLevel = value; } + @Override public int getFoodLevel() { return getHandle().getFoodData().foodLevel; } + @Override public void setFoodLevel(int value) { getHandle().getFoodData().foodLevel = value; } + @Override public Location getBedSpawnLocation() { World world = getServer().getWorld(getHandle().spawnWorld); - ChunkCoordinates bed = getHandle().getBed(); + BlockPosition bed = getHandle().getBed(); if (world != null && bed != null) { bed = EntityHuman.getBed(((CraftWorld) world).getHandle(), bed, getHandle().isRespawnForced()); if (bed != null) { - return new Location(world, bed.x, bed.y, bed.z); + return new Location(world, bed.getX(), bed.getY(), bed.getZ()); } } return null; } + @Override public void setBedSpawnLocation(Location location) { setBedSpawnLocation(location, false); } + @Override public void setBedSpawnLocation(Location location, boolean override) { if (location == null) { getHandle().setRespawnPosition(null, override); } else { - getHandle().setRespawnPosition(new ChunkCoordinates(location.getBlockX(), location.getBlockY(), location.getBlockZ()), override); + getHandle().setRespawnPosition(new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), override); getHandle().spawnWorld = location.getWorld().getName(); } } + @Override public void hidePlayer(Player player) { Validate.notNull(player, "hidden player cannot be null"); if (getHandle().playerConnection == null) return; @@ -893,9 +886,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } //remove the hidden player from this player user list - getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(player.getPlayerListName(), false, 9999)); + getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, other)); } + @Override public void showPlayer(Player player) { Validate.notNull(player, "shown player cannot be null"); if (getHandle().playerConnection == null) return; @@ -910,17 +904,19 @@ public class CraftPlayer extends CraftHumanEntity implements Player { entry.updatePlayer(getHandle()); } - getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(player.getPlayerListName(), true, getHandle().ping)); + getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, other)); } public void removeDisconnectingPlayer(Player player) { hiddenPlayers.remove(player.getUniqueId()); } + @Override public boolean canSee(Player player) { return !hiddenPlayers.contains(player.getUniqueId()); } + @Override public Map<String, Object> serialize() { Map<String, Object> result = new LinkedHashMap<String, Object>(); @@ -929,6 +925,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return result; } + @Override public Player getPlayer() { return this; } @@ -955,14 +952,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return hash; } + @Override public long getFirstPlayed() { return firstPlayed; } + @Override public long getLastPlayed() { return lastPlayed; } + @Override public boolean hasPlayedBefore() { return hasPlayedBefore; } @@ -1009,36 +1009,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player { data.setString("lastKnownName", handle.getName()); } + @Override public boolean beginConversation(Conversation conversation) { return conversationTracker.beginConversation(conversation); } + @Override public void abandonConversation(Conversation conversation) { conversationTracker.abandonConversation(conversation, new ConversationAbandonedEvent(conversation, new ManuallyAbandonedConversationCanceller())); } + @Override public void abandonConversation(Conversation conversation, ConversationAbandonedEvent details) { conversationTracker.abandonConversation(conversation, details); } + @Override public void acceptConversationInput(String input) { conversationTracker.acceptConversationInput(input); } + @Override public boolean isConversing() { return conversationTracker.isConversing(); } + @Override public void sendPluginMessage(Plugin source, String channel, byte[] message) { StandardMessenger.validatePluginMessage(server.getMessenger(), source, channel, message); if (getHandle().playerConnection == null) return; if (channels.contains(channel)) { - PacketPlayOutCustomPayload packet = new PacketPlayOutCustomPayload(channel, message); + PacketPlayOutCustomPayload packet = new PacketPlayOutCustomPayload(channel, new PacketDataSerializer(Unpooled.wrappedBuffer(message))); getHandle().playerConnection.sendPacket(packet); } } + @Override public void setTexturePack(String url) { setResourcePack(url); } @@ -1047,7 +1054,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void setResourcePack(String url) { Validate.notNull(url, "Resource pack URL cannot be null"); - getHandle().setResourcePack(url); + getHandle().setResourcePack(url, "null"); } public void addChannel(String channel) { @@ -1062,6 +1069,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } } + @Override public Set<String> getListeningPluginChannels() { return ImmutableSet.copyOf(channels); } @@ -1082,7 +1090,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } } - getHandle().playerConnection.sendPacket(new PacketPlayOutCustomPayload("REGISTER", stream.toByteArray())); + getHandle().playerConnection.sendPacket(new PacketPlayOutCustomPayload("REGISTER", new PacketDataSerializer(Unpooled.wrappedBuffer(stream.toByteArray())))); } } @@ -1126,10 +1134,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player { perm.clearPermissions(); } + @Override public boolean isFlying() { return getHandle().abilities.isFlying; } + @Override public void setFlying(boolean value) { if (!getAllowFlight() && value) { throw new IllegalArgumentException("Cannot make player fly if getAllowFlight() is false"); @@ -1139,10 +1149,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player { getHandle().updateAbilities(); } + @Override public boolean getAllowFlight() { return getHandle().abilities.canFly; } + @Override public void setAllowFlight(boolean value) { if (isFlying() && !value) { getHandle().abilities.isFlying = false; @@ -1161,6 +1173,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } } + @Override public void setFlySpeed(float value) { validateSpeed(value); EntityPlayer player = getHandle(); @@ -1169,6 +1182,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } + @Override public void setWalkSpeed(float value) { validateSpeed(value); EntityPlayer player = getHandle(); @@ -1176,10 +1190,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player { player.updateAbilities(); } + @Override public float getFlySpeed() { return getHandle().abilities.flySpeed * 2f; } + @Override public float getWalkSpeed() { return getHandle().abilities.walkSpeed * 2f; } @@ -1209,10 +1225,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player { getHandle().triggerHealthUpdate(); } + @Override public CraftScoreboard getScoreboard() { return this.server.getScoreboardManager().getPlayerBoard(this); } + @Override public void setScoreboard(Scoreboard scoreboard) { Validate.notNull(scoreboard, "Scoreboard cannot be null"); PlayerConnection playerConnection = getHandle().playerConnection; @@ -1226,6 +1244,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { this.server.getScoreboardManager().setPlayerBoard(this, scoreboard); } + @Override public void setHealthScale(double value) { Validate.isTrue((float) value > 0F, "Must be greater than 0"); healthScale = value; @@ -1233,16 +1252,19 @@ public class CraftPlayer extends CraftHumanEntity implements Player { updateScaledHealth(); } + @Override public double getHealthScale() { return healthScale; } + @Override public void setHealthScaled(boolean scale) { if (scaledHealth != (scaledHealth = scale)) { updateScaledHealth(); } } + @Override public boolean isHealthScaled() { return scaledHealth; } @@ -1285,6 +1307,6 @@ public class CraftPlayer extends CraftHumanEntity implements Player { break; } } - collection.add(new AttributeModifiable(getHandle().getAttributeMap(), (new AttributeRanged("generic.maxHealth", scaledHealth ? healthScale : getMaxHealth(), 0.0D, Float.MAX_VALUE)).a("Max Health").a(true))); + collection.add(new AttributeModifiable(getHandle().getAttributeMap(), (new AttributeRanged(null, "generic.maxHealth", scaledHealth ? healthScale : getMaxHealth(), 0.0D, Float.MAX_VALUE)).a("Max Health").a(true))); } } |