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 | 181 |
1 files changed, 117 insertions, 64 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index ac732732..01536089 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -39,6 +39,8 @@ import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.craftbukkit.map.CraftMapView; import org.bukkit.craftbukkit.map.RenderData; import org.bukkit.craftbukkit.scoreboard.CraftScoreboard; +import org.bukkit.craftbukkit.util.CraftChatMessage; +import org.bukkit.craftbukkit.util.CraftMagicNumbers; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerGameModeChangeEvent; @@ -129,36 +131,45 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } } + @Override public void sendRawMessage(String message) { if (getHandle().playerConnection == null) return; - getHandle().playerConnection.sendPacket(new Packet3Chat(ChatMessage.d(message))); + for (IChatBaseComponent component : CraftChatMessage.fromString(message)) { + getHandle().playerConnection.sendPacket(new PacketPlayOutChat(component)); + } } + @Override public void sendMessage(String message) { if (!conversationTracker.isConversingModaly()) { this.sendRawMessage(message); } } + @Override public void sendMessage(String[] messages) { for (String message : messages) { sendMessage(message); } } + @Override public String getDisplayName() { return getHandle().displayName; } + @Override public void setDisplayName(final String name) { getHandle().displayName = name; } + @Override public String getPlayerListName() { return getHandle().listName; } + @Override public void setPlayerListName(String name) { String oldName = getHandle().listName; @@ -184,8 +195,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player { getHandle().listName = name; // Change the name on the client side - Packet201PlayerInfo oldpacket = new Packet201PlayerInfo(oldName, false, 9999); - Packet201PlayerInfo packet = new Packet201PlayerInfo(name, true, getHandle().ping); + 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; @@ -217,47 +228,89 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return nameEquals && idEquals; } + @Override public void kickPlayer(String message) { if (getHandle().playerConnection == null) return; getHandle().playerConnection.disconnect(message == null ? "" : message); } + @Override public void setCompassTarget(Location loc) { if (getHandle().playerConnection == null) return; // Do not directly assign here, from the packethandler we'll assign it. - getHandle().playerConnection.sendPacket(new Packet6SpawnPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); + getHandle().playerConnection.sendPacket(new PacketPlayOutSpawnPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); } + @Override public Location getCompassTarget() { return getHandle().compassTarget; } + @Override public void chat(String msg) { if (getHandle().playerConnection == null) return; getHandle().playerConnection.chat(msg, false); } + @Override public boolean performCommand(String command) { return server.dispatchCommand(this, command); } + @Override public void playNote(Location loc, byte instrument, byte note) { if (getHandle().playerConnection == null) return; - int id = getHandle().world.getTypeId(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - getHandle().playerConnection.sendPacket(new Packet54PlayNoteBlock(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), id, instrument, note)); + String instrumentName = null; + switch (instrument) { + case 0: + instrumentName = "harp"; + break; + case 1: + instrumentName = "bd"; + break; + case 2: + instrumentName = "snare"; + break; + case 3: + instrumentName = "hat"; + break; + case 4: + instrumentName = "bassattack"; + break; + } + getHandle().playerConnection.sendPacket(new PacketPlayOutNamedSoundEffect("note."+instrumentName, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), 3.0f, note)); } + @Override public void playNote(Location loc, Instrument instrument, Note note) { if (getHandle().playerConnection == null) return; - int id = getHandle().world.getTypeId(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - getHandle().playerConnection.sendPacket(new Packet54PlayNoteBlock(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), id, instrument.getType(), note.getId())); + String instrumentName = null; + switch (instrument.ordinal()) { + case 0: + instrumentName = "harp"; + break; + case 1: + instrumentName = "bd"; + break; + case 2: + instrumentName = "snare"; + break; + case 3: + instrumentName = "hat"; + break; + case 4: + instrumentName = "bassattack"; + break; + } + getHandle().playerConnection.sendPacket(new PacketPlayOutNamedSoundEffect("note."+instrumentName, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), 3.0f, note.getId())); } + @Override public void playSound(Location loc, Sound sound, float volume, float pitch) { if (sound == null) { return; @@ -265,6 +318,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { playSound(loc, CraftSound.getSound(sound), volume, pitch); } + @Override public void playSound(Location loc, String sound, float volume, float pitch) { if (loc == null || sound == null || getHandle().playerConnection == null) return; @@ -272,18 +326,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { double y = loc.getBlockY() + 0.5; double z = loc.getBlockZ() + 0.5; - Packet62NamedSoundEffect packet = new Packet62NamedSoundEffect(sound, x, y, z, volume, pitch); + PacketPlayOutNamedSoundEffect packet = new PacketPlayOutNamedSoundEffect(sound, x, y, z, volume, pitch); getHandle().playerConnection.sendPacket(packet); } + @Override public void playEffect(Location loc, Effect effect, int data) { if (getHandle().playerConnection == null) return; int packetData = effect.getId(); - Packet61WorldEvent packet = new Packet61WorldEvent(packetData, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), data, false); + PacketPlayOutWorldEvent packet = new PacketPlayOutWorldEvent(packetData, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), data, false); getHandle().playerConnection.sendPacket(packet); } + @Override public <T> void playEffect(Location loc, Effect effect, T data) { if (data != null) { Validate.isTrue(data.getClass().equals(effect.getData()), "Wrong kind of data for this effect!"); @@ -295,20 +351,23 @@ public class CraftPlayer extends CraftHumanEntity implements Player { playEffect(loc, effect, datavalue); } + @Override public void sendBlockChange(Location loc, Material material, byte data) { sendBlockChange(loc, material.getId(), data); } + @Override public void sendBlockChange(Location loc, int material, byte data) { if (getHandle().playerConnection == null) return; - Packet53BlockChange packet = new Packet53BlockChange(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), ((CraftWorld) loc.getWorld()).getHandle()); + PacketPlayOutBlockChange packet = new PacketPlayOutBlockChange(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), ((CraftWorld) loc.getWorld()).getHandle()); - packet.material = material; + packet.block = CraftMagicNumbers.getBlock(material); packet.data = data; getHandle().playerConnection.sendPacket(packet); } + @Override public boolean sendChunkChange(Location loc, int sx, int sy, int sz, byte[] data) { if (getHandle().playerConnection == null) return false; @@ -342,6 +401,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { throw new NotImplementedException("Chunk changes do not yet work"); // TODO: Chunk changes. } + @Override public void sendMap(MapView map) { if (getHandle().playerConnection == null) return; @@ -352,7 +412,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { for (int y = 0; y < 128; ++y) { bytes[y + 3] = data.buffer[y * 128 + x]; } - Packet131ItemData packet = new Packet131ItemData((short) Material.MAP.getId(), map.getId(), bytes); + PacketPlayOutMap packet = new PacketPlayOutMap(map.getId(), bytes); getHandle().playerConnection.sendPacket(packet); } } @@ -365,7 +425,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return false; } - if (entity.playerConnection == null || entity.playerConnection.disconnected) { + if (entity.playerConnection == null || entity.playerConnection.isDisconnected()) { return false; } @@ -408,125 +468,125 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return true; } + @Override public void setSneaking(boolean sneak) { getHandle().setSneaking(sneak); } + @Override public boolean isSneaking() { return getHandle().isSneaking(); } + @Override public boolean isSprinting() { return getHandle().isSprinting(); } + @Override public void setSprinting(boolean sprinting) { getHandle().setSprinting(sprinting); } + @Override public void loadData() { server.getHandle().playerFileData.load(getHandle()); } + @Override public void saveData() { server.getHandle().playerFileData.save(getHandle()); } @Deprecated + @Override public void updateInventory() { getHandle().updateInventory(getHandle().activeContainer); } + @Override public void setSleepingIgnored(boolean isSleeping) { getHandle().fauxSleeping = isSleeping; ((CraftWorld) getWorld()).getHandle().checkSleepStatus(); } + @Override public boolean isSleepingIgnored() { return getHandle().fauxSleeping; } + @Override public void awardAchievement(Achievement achievement) { - sendStatistic(achievement.getId(), 1); + // TODO - non-functional as of ID purge } + @Override public void incrementStatistic(Statistic statistic) { incrementStatistic(statistic, 1); } + @Override public void incrementStatistic(Statistic statistic, int amount) { - sendStatistic(statistic.getId(), amount); + // TODO - non-functional as of ID purge } + @Override public void incrementStatistic(Statistic statistic, Material material) { incrementStatistic(statistic, material, 1); } + @Override public void incrementStatistic(Statistic statistic, Material material, int amount) { - if (!statistic.isSubstatistic()) { - throw new IllegalArgumentException("Given statistic is not a substatistic"); - } - if (statistic.isBlock() != material.isBlock()) { - throw new IllegalArgumentException("Given material is not valid for this substatistic"); - } - - int mat = material.getId(); - - if (!material.isBlock()) { - mat -= 255; - } - - sendStatistic(statistic.getId() + mat, amount); - } - - private void sendStatistic(int id, int amount) { - if (getHandle().playerConnection == null) return; - - while (amount > Byte.MAX_VALUE) { - sendStatistic(id, Byte.MAX_VALUE); - amount -= Byte.MAX_VALUE; - } - - getHandle().playerConnection.sendPacket(new Packet200Statistic(id, amount)); + // TODO - non-functional as of ID purge } + @Override public void setPlayerTime(long time, boolean relative) { getHandle().timeOffset = time; getHandle().relativeTime = relative; } + @Override public long getPlayerTimeOffset() { return getHandle().timeOffset; } + @Override public long getPlayerTime() { return getHandle().getPlayerTime(); } + @Override public boolean isPlayerTimeRelative() { return getHandle().relativeTime; } + @Override public void resetPlayerTime() { setPlayerTime(0, true); } + @Override public void setPlayerWeather(WeatherType type) { getHandle().setPlayerWeather(type, true); } + @Override public WeatherType getPlayerWeather() { return getHandle().getPlayerWeather(); } + @Override public void resetPlayerWeather() { getHandle().resetPlayerWeather(); } + @Override public boolean isBanned() { return server.getHandle().getNameBans().isBanned(getName().toLowerCase()); } + @Override public void setBanned(boolean value) { if (value) { BanEntry entry = new BanEntry(getName().toLowerCase()); @@ -538,10 +598,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player { server.getHandle().getNameBans().save(); } + @Override public boolean isWhitelisted() { return server.getHandle().getWhitelisted().contains(getName().toLowerCase()); } + @Override public void setWhitelisted(boolean value) { if (value) { server.getHandle().addWhitelist(getName().toLowerCase()); @@ -566,7 +628,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } getHandle().playerInteractManager.setGameMode(EnumGamemode.a(mode.getValue())); - getHandle().playerConnection.sendPacket(new Packet70Bed(3, mode.getValue())); + getHandle().playerConnection.sendPacket(new PacketPlayOutGameStateChange(3, mode.getValue())); } } @@ -669,13 +731,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { //remove this player from the hidden player's EntityTrackerEntry EntityTracker tracker = ((WorldServer) entity.world).tracker; EntityPlayer other = ((CraftPlayer) player).getHandle(); - EntityTrackerEntry entry = (EntityTrackerEntry) tracker.trackedEntities.get(other.id); + EntityTrackerEntry entry = (EntityTrackerEntry) tracker.trackedEntities.get(other.getId()); if (entry != null) { entry.clear(getHandle()); } //remove the hidden player from this player user list - getHandle().playerConnection.sendPacket(new Packet201PlayerInfo(player.getPlayerListName(), false, 9999)); + getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(player.getPlayerListName(), false, 9999)); } public void showPlayer(Player player) { @@ -687,12 +749,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player { EntityTracker tracker = ((WorldServer) entity.world).tracker; EntityPlayer other = ((CraftPlayer) player).getHandle(); - EntityTrackerEntry entry = (EntityTrackerEntry) tracker.trackedEntities.get(other.id); + EntityTrackerEntry entry = (EntityTrackerEntry) tracker.trackedEntities.get(other.getId()); if (entry != null && !entry.trackedPlayers.contains(getHandle())) { entry.updatePlayer(getHandle()); } - getHandle().playerConnection.sendPacket(new Packet201PlayerInfo(player.getPlayerListName(), true, getHandle().ping)); + getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(player.getPlayerListName(), true, getHandle().ping)); } public boolean canSee(Player player) { @@ -772,7 +834,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void setExtraData(NBTTagCompound nbttagcompound) { if (!nbttagcompound.hasKey("bukkit")) { - nbttagcompound.setCompound("bukkit", new NBTTagCompound()); + nbttagcompound.set("bukkit", new NBTTagCompound()); } NBTTagCompound data = nbttagcompound.getCompound("bukkit"); @@ -811,10 +873,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (getHandle().playerConnection == null) return; if (channels.contains(channel)) { - Packet250CustomPayload packet = new Packet250CustomPayload(); - packet.tag = channel; - packet.length = message.length; - packet.data = message; + PacketPlayOutCustomPayload packet = new PacketPlayOutCustomPayload(channel, message); getHandle().playerConnection.sendPacket(packet); } } @@ -825,7 +884,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { byte[] message = (url + "\0" + "16").getBytes(); Validate.isTrue(message.length <= Messenger.MAX_MESSAGE_SIZE, "Texture pack URL is too long"); - getHandle().playerConnection.sendPacket(new Packet250CustomPayload("MC|TPack", message)); + getHandle().playerConnection.sendPacket(new PacketPlayOutCustomPayload("MC|TPack", message)); } public void addChannel(String channel) { @@ -849,9 +908,6 @@ public class CraftPlayer extends CraftHumanEntity implements Player { Set<String> listening = server.getMessenger().getIncomingChannels(); if (!listening.isEmpty()) { - Packet250CustomPayload packet = new Packet250CustomPayload(); - - packet.tag = "REGISTER"; ByteArrayOutputStream stream = new ByteArrayOutputStream(); for (String channel : listening) { @@ -863,10 +919,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } } - packet.data = stream.toByteArray(); - packet.length = packet.data.length; - - getHandle().playerConnection.sendPacket(packet); + getHandle().playerConnection.sendPacket(new PacketPlayOutCustomPayload("REGISTER", stream.toByteArray())); } } @@ -1003,7 +1056,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (playerConnection == null) { throw new IllegalStateException("Cannot set scoreboard yet"); } - if (playerConnection.disconnected) { + if (playerConnection.isDisconnected()) { throw new IllegalStateException("Cannot set scoreboard for invalid CraftPlayer"); } @@ -1045,14 +1098,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } public void updateScaledHealth() { - AttributeMapServer attributemapserver = (AttributeMapServer) getHandle().aX(); + AttributeMapServer attributemapserver = (AttributeMapServer) getHandle().bc(); Set set = attributemapserver.b(); injectScaledMaxHealth(set, true); getHandle().getDataWatcher().watch(6, (float) getScaledHealth()); - getHandle().playerConnection.sendPacket(new Packet8UpdateHealth(getScaledHealth(), getHandle().getFoodData().a(), getHandle().getFoodData().e())); - getHandle().playerConnection.sendPacket(new Packet44UpdateAttributes(getHandle().id, set)); + getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateHealth(getScaledHealth(), getHandle().getFoodData().a(), getHandle().getFoodData().e())); + getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateAttributes(getHandle().getId(), set)); set.clear(); getHandle().maxHealthCache = getMaxHealth(); @@ -1070,6 +1123,6 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } continue; } - collection.add(new AttributeModifiable(getHandle().aX(), (new AttributeRanged("generic.maxHealth", scaledHealth ? healthScale : getMaxHealth(), 0.0D, Float.MAX_VALUE)).a("Max Health").a(true))); + collection.add(new AttributeModifiable(getHandle().bc(), (new AttributeRanged("generic.maxHealth", scaledHealth ? healthScale : getMaxHealth(), 0.0D, Float.MAX_VALUE)).a("Max Health").a(true))); } } |