package net.minecraft.network; import com.google.common.collect.Lists; import com.google.common.util.concurrent.Futures; import io.netty.buffer.Unpooled; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.Set; import java.util.concurrent.Callable; import net.minecraft.block.material.Material; import net.minecraft.command.server.CommandBlockLogic; import net.minecraft.crash.CrashReport; import net.minecraft.crash.CrashReportCategory; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityMinecartCommandBlock; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityXPOrb; import net.minecraft.entity.passive.EntityHorse; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.init.Items; import net.minecraft.inventory.Container; import net.minecraft.inventory.ContainerBeacon; import net.minecraft.inventory.ContainerMerchant; import net.minecraft.inventory.ContainerRepair; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemEditableBook; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemWritableBook; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagString; import net.minecraft.network.play.INetHandlerPlayServer; import net.minecraft.network.play.client.C00PacketKeepAlive; import net.minecraft.network.play.client.C01PacketChatMessage; import net.minecraft.network.play.client.C02PacketUseEntity; import net.minecraft.network.play.client.C03PacketPlayer; import net.minecraft.network.play.client.C07PacketPlayerDigging; import net.minecraft.network.play.client.C08PacketPlayerBlockPlacement; import net.minecraft.network.play.client.C09PacketHeldItemChange; import net.minecraft.network.play.client.C0APacketAnimation; import net.minecraft.network.play.client.C0BPacketEntityAction; import net.minecraft.network.play.client.C0CPacketInput; import net.minecraft.network.play.client.C0DPacketCloseWindow; import net.minecraft.network.play.client.C0EPacketClickWindow; import net.minecraft.network.play.client.C0FPacketConfirmTransaction; import net.minecraft.network.play.client.C10PacketCreativeInventoryAction; import net.minecraft.network.play.client.C11PacketEnchantItem; import net.minecraft.network.play.client.C12PacketUpdateSign; import net.minecraft.network.play.client.C13PacketPlayerAbilities; import net.minecraft.network.play.client.C14PacketTabComplete; import net.minecraft.network.play.client.C15PacketClientSettings; import net.minecraft.network.play.client.C16PacketClientStatus; import net.minecraft.network.play.client.C17PacketCustomPayload; import net.minecraft.network.play.client.C18PacketSpectate; import net.minecraft.network.play.client.C19PacketResourcePackStatus; import net.minecraft.network.play.server.S00PacketKeepAlive; import net.minecraft.network.play.server.S02PacketChat; import net.minecraft.network.play.server.S07PacketRespawn; import net.minecraft.network.play.server.S08PacketPlayerPosLook; import net.minecraft.network.play.server.S18PacketEntityTeleport; import net.minecraft.network.play.server.S23PacketBlockChange; import net.minecraft.network.play.server.S2FPacketSetSlot; import net.minecraft.network.play.server.S32PacketConfirmTransaction; import net.minecraft.network.play.server.S3APacketTabComplete; import net.minecraft.network.play.server.S40PacketDisconnect; import net.minecraft.server.MinecraftServer; import net.minecraft.server.gui.IUpdatePlayerListBox; import net.minecraft.server.management.UserListBansEntry; import net.minecraft.stats.AchievementList; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityCommandBlock; import net.minecraft.tileentity.TileEntitySign; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatAllowedCharacters; import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.EnumFacing; import net.minecraft.util.IChatComponent; import net.minecraft.util.IntHashMap; import net.minecraft.util.ReportedException; import net.minecraft.world.WorldServer; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class NetHandlerPlayServer implements INetHandlerPlayServer, IUpdatePlayerListBox { private static final Logger logger = LogManager.getLogger(); public final NetworkManager netManager; private final MinecraftServer serverController; public EntityPlayerMP playerEntity; private int networkTickCount; private int field_175090_f; /** * Used to keep track of how the player is floating while gamerules should prevent that. Surpassing 80 ticks means * kick */ private int floatingTickCount; private boolean field_147366_g; private int field_147378_h; private long lastPingTime; private long lastSentPingPacket; /** * Incremented by 20 each time a user sends a chat message, decreased by one every tick. Non-ops kicked when over * 200 */ private int chatSpamThresholdCount; private int itemDropThreshold; private IntHashMap field_147372_n = new IntHashMap(); private double lastPosX; private double lastPosY; private double lastPosZ; private boolean hasMoved = true; private static final String __OBFID = "CL_00001452"; public NetHandlerPlayServer(MinecraftServer server, NetworkManager networkManagerIn, EntityPlayerMP playerIn) { this.serverController = server; this.netManager = networkManagerIn; networkManagerIn.setNetHandler(this); this.playerEntity = playerIn; playerIn.playerNetServerHandler = this; } /** * Updates the JList with a new model. */ public void update() { this.field_147366_g = false; ++this.networkTickCount; this.serverController.theProfiler.startSection("keepAlive"); if ((long)this.networkTickCount - this.lastSentPingPacket > 40L) { this.lastSentPingPacket = (long)this.networkTickCount; this.lastPingTime = this.currentTimeMillis(); this.field_147378_h = (int)this.lastPingTime; this.sendPacket(new S00PacketKeepAlive(this.field_147378_h)); } this.serverController.theProfiler.endSection(); if (this.chatSpamThresholdCount > 0) { --this.chatSpamThresholdCount; } if (this.itemDropThreshold > 0) { --this.itemDropThreshold; } if (this.playerEntity.getLastActiveTime() > 0L && this.serverController.getMaxPlayerIdleMinutes() > 0 && MinecraftServer.getCurrentTimeMillis() - this.playerEntity.getLastActiveTime() > (long)(this.serverController.getMaxPlayerIdleMinutes() * 1000 * 60)) { this.kickPlayerFromServer("You have been idle for too long!"); } } public NetworkManager getNetworkManager() { return this.netManager; } /** * Kick a player from the server with a reason */ public void kickPlayerFromServer(String reason) { final ChatComponentText var2 = new ChatComponentText(reason); this.netManager.sendPacket(new S40PacketDisconnect(var2), new GenericFutureListener() { private static final String __OBFID = "CL_00001453"; public void operationComplete(Future p_operationComplete_1_) { NetHandlerPlayServer.this.netManager.closeChannel(var2); } }, new GenericFutureListener[0]); this.netManager.disableAutoRead(); Futures.getUnchecked(this.serverController.addScheduledTask(new Runnable() { private static final String __OBFID = "CL_00001454"; public void run() { NetHandlerPlayServer.this.netManager.checkDisconnected(); } })); } /** * Processes player movement input. Includes walking, strafing, jumping, sneaking; excludes riding and toggling * flying/sprinting */ public void processInput(C0CPacketInput packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); this.playerEntity.setEntityActionState(packetIn.getStrafeSpeed(), packetIn.getForwardSpeed(), packetIn.isJumping(), packetIn.isSneaking()); } /** * Processes clients perspective on player positioning and/or orientation */ public void processPlayer(C03PacketPlayer packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); WorldServer var2 = this.serverController.worldServerForDimension(this.playerEntity.dimension); this.field_147366_g = true; if (!this.playerEntity.playerConqueredTheEnd) { double var3 = this.playerEntity.posX; double var5 = this.playerEntity.posY; double var7 = this.playerEntity.posZ; double var9 = 0.0D; double var11 = packetIn.getPositionX() - this.lastPosX; double var13 = packetIn.getPositionY() - this.lastPosY; double var15 = packetIn.getPositionZ() - this.lastPosZ; if (packetIn.func_149466_j()) { var9 = var11 * var11 + var13 * var13 + var15 * var15; if (!this.hasMoved && var9 < 0.25D) { this.hasMoved = true; } } if (this.hasMoved) { this.field_175090_f = this.networkTickCount; double var19; double var21; double var23; if (this.playerEntity.ridingEntity != null) { float var47 = this.playerEntity.rotationYaw; float var18 = this.playerEntity.rotationPitch; this.playerEntity.ridingEntity.updateRiderPosition(); var19 = this.playerEntity.posX; var21 = this.playerEntity.posY; var23 = this.playerEntity.posZ; if (packetIn.getRotating()) { var47 = packetIn.getYaw(); var18 = packetIn.getPitch(); } this.playerEntity.onGround = packetIn.func_149465_i(); this.playerEntity.onUpdateEntity(); this.playerEntity.setPositionAndRotation(var19, var21, var23, var47, var18); if (this.playerEntity.ridingEntity != null) { this.playerEntity.ridingEntity.updateRiderPosition(); } this.serverController.getConfigurationManager().serverUpdateMountedMovingPlayer(this.playerEntity); if (this.playerEntity.ridingEntity != null) { if (var9 > 4.0D) { Entity var48 = this.playerEntity.ridingEntity; this.playerEntity.playerNetServerHandler.sendPacket(new S18PacketEntityTeleport(var48)); this.setPlayerLocation(this.playerEntity.posX, this.playerEntity.posY, this.playerEntity.posZ, this.playerEntity.rotationYaw, this.playerEntity.rotationPitch); } this.playerEntity.ridingEntity.isAirBorne = true; } if (this.hasMoved) { this.lastPosX = this.playerEntity.posX; this.lastPosY = this.playerEntity.posY; this.lastPosZ = this.playerEntity.posZ; } var2.updateEntity(this.playerEntity); return; } if (this.playerEntity.isPlayerSleeping()) { this.playerEntity.onUpdateEntity(); this.playerEntity.setPositionAndRotation(this.lastPosX, this.lastPosY, this.lastPosZ, this.playerEntity.rotationYaw, this.playerEntity.rotationPitch); var2.updateEntity(this.playerEntity); return; } double var17 = this.playerEntity.posY; this.lastPosX = this.playerEntity.posX; this.lastPosY = this.playerEntity.posY; this.lastPosZ = this.playerEntity.posZ; var19 = this.playerEntity.posX; var21 = this.playerEntity.posY; var23 = this.playerEntity.posZ; float var25 = this.playerEntity.rotationYaw; float var26 = this.playerEntity.rotationPitch; if (packetIn.func_149466_j() && packetIn.getPositionY() == -999.0D) { packetIn.func_149469_a(false); } if (packetIn.func_149466_j()) { var19 = packetIn.getPositionX(); var21 = packetIn.getPositionY(); var23 = packetIn.getPositionZ(); if (Math.abs(packetIn.getPositionX()) > 3.0E7D || Math.abs(packetIn.getPositionZ()) > 3.0E7D) { this.kickPlayerFromServer("Illegal position"); return; } } if (packetIn.getRotating()) { var25 = packetIn.getYaw(); var26 = packetIn.getPitch(); } this.playerEntity.onUpdateEntity(); this.playerEntity.setPositionAndRotation(this.lastPosX, this.lastPosY, this.lastPosZ, var25, var26); if (!this.hasMoved) { return; } double var27 = var19 - this.playerEntity.posX; double var29 = var21 - this.playerEntity.posY; double var31 = var23 - this.playerEntity.posZ; double var33 = Math.min(Math.abs(var27), Math.abs(this.playerEntity.motionX)); double var35 = Math.min(Math.abs(var29), Math.abs(this.playerEntity.motionY)); double var37 = Math.min(Math.abs(var31), Math.abs(this.playerEntity.motionZ)); double var39 = var33 * var33 + var35 * var35 + var37 * var37; if (var39 > 100.0D && (!this.serverController.isSinglePlayer() || !this.serverController.getServerOwner().equals(this.playerEntity.getName()))) { logger.warn(this.playerEntity.getName() + " moved too quickly! " + var27 + "," + var29 + "," + var31 + " (" + var33 + ", " + var35 + ", " + var37 + ")"); this.setPlayerLocation(this.lastPosX, this.lastPosY, this.lastPosZ, this.playerEntity.rotationYaw, this.playerEntity.rotationPitch); return; } float var41 = 0.0625F; boolean var42 = var2.getCollidingBoundingBoxes(this.playerEntity, this.playerEntity.getEntityBoundingBox().contract((double)var41, (double)var41, (double)var41)).isEmpty(); if (this.playerEntity.onGround && !packetIn.func_149465_i() && var29 > 0.0D) { this.playerEntity.jump(); } this.playerEntity.moveEntity(var27, var29, var31); this.playerEntity.onGround = packetIn.func_149465_i(); double var43 = var29; var27 = var19 - this.playerEntity.posX; var29 = var21 - this.playerEntity.posY; if (var29 > -0.5D || var29 < 0.5D) { var29 = 0.0D; } var31 = var23 - this.playerEntity.posZ; var39 = var27 * var27 + var29 * var29 + var31 * var31; boolean var45 = false; if (var39 > 0.0625D && !this.playerEntity.isPlayerSleeping() && !this.playerEntity.theItemInWorldManager.isCreative()) { var45 = true; logger.warn(this.playerEntity.getName() + " moved wrongly!"); } this.playerEntity.setPositionAndRotation(var19, var21, var23, var25, var26); this.playerEntity.addMovementStat(this.playerEntity.posX - var3, this.playerEntity.posY - var5, this.playerEntity.posZ - var7); if (!this.playerEntity.noClip) { boolean var46 = var2.getCollidingBoundingBoxes(this.playerEntity, this.playerEntity.getEntityBoundingBox().contract((double)var41, (double)var41, (double)var41)).isEmpty(); if (var42 && (var45 || !var46) && !this.playerEntity.isPlayerSleeping()) { this.setPlayerLocation(this.lastPosX, this.lastPosY, this.lastPosZ, var25, var26); return; } } AxisAlignedBB var49 = this.playerEntity.getEntityBoundingBox().expand((double)var41, (double)var41, (double)var41).addCoord(0.0D, -0.55D, 0.0D); if (!this.serverController.isFlightAllowed() && !this.playerEntity.capabilities.allowFlying && !var2.checkBlockCollision(var49)) { if (var43 >= -0.03125D) { ++this.floatingTickCount; if (this.floatingTickCount > 80) { logger.warn(this.playerEntity.getName() + " was kicked for floating too long!"); this.kickPlayerFromServer("Flying is not enabled on this server"); return; } } } else { this.floatingTickCount = 0; } this.playerEntity.onGround = packetIn.func_149465_i(); this.serverController.getConfigurationManager().serverUpdateMountedMovingPlayer(this.playerEntity); this.playerEntity.handleFalling(this.playerEntity.posY - var17, packetIn.func_149465_i()); } else if (this.networkTickCount - this.field_175090_f > 20) { this.setPlayerLocation(this.lastPosX, this.lastPosY, this.lastPosZ, this.playerEntity.rotationYaw, this.playerEntity.rotationPitch); } } } public void setPlayerLocation(double x, double y, double z, float yaw, float pitch) { this.func_175089_a(x, y, z, yaw, pitch, Collections.emptySet()); } public void func_175089_a(double p_175089_1_, double p_175089_3_, double p_175089_5_, float p_175089_7_, float p_175089_8_, Set p_175089_9_) { this.hasMoved = false; this.lastPosX = p_175089_1_; this.lastPosY = p_175089_3_; this.lastPosZ = p_175089_5_; if (p_175089_9_.contains(S08PacketPlayerPosLook.EnumFlags.X)) { this.lastPosX += this.playerEntity.posX; } if (p_175089_9_.contains(S08PacketPlayerPosLook.EnumFlags.Y)) { this.lastPosY += this.playerEntity.posY; } if (p_175089_9_.contains(S08PacketPlayerPosLook.EnumFlags.Z)) { this.lastPosZ += this.playerEntity.posZ; } float var10 = p_175089_7_; float var11 = p_175089_8_; if (p_175089_9_.contains(S08PacketPlayerPosLook.EnumFlags.Y_ROT)) { var10 = p_175089_7_ + this.playerEntity.rotationYaw; } if (p_175089_9_.contains(S08PacketPlayerPosLook.EnumFlags.X_ROT)) { var11 = p_175089_8_ + this.playerEntity.rotationPitch; } this.playerEntity.setPositionAndRotation(this.lastPosX, this.lastPosY, this.lastPosZ, var10, var11); this.playerEntity.playerNetServerHandler.sendPacket(new S08PacketPlayerPosLook(p_175089_1_, p_175089_3_, p_175089_5_, p_175089_7_, p_175089_8_, p_175089_9_)); } /** * Processes the player initiating/stopping digging on a particular spot, as well as a player dropping items?. (0: * initiated, 1: reinitiated, 2? , 3-4 drop item (respectively without or with player control), 5: stopped; x,y,z, * side clicked on;) */ public void processPlayerDigging(C07PacketPlayerDigging packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); WorldServer var2 = this.serverController.worldServerForDimension(this.playerEntity.dimension); BlockPos var3 = packetIn.func_179715_a(); this.playerEntity.markPlayerActive(); switch (NetHandlerPlayServer.SwitchAction.field_180224_a[packetIn.func_180762_c().ordinal()]) { case 1: if (!this.playerEntity.func_175149_v()) { this.playerEntity.dropOneItem(false); } return; case 2: if (!this.playerEntity.func_175149_v()) { this.playerEntity.dropOneItem(true); } return; case 3: this.playerEntity.stopUsingItem(); return; case 4: case 5: case 6: double var4 = this.playerEntity.posX - ((double)var3.getX() + 0.5D); double var6 = this.playerEntity.posY - ((double)var3.getY() + 0.5D) + 1.5D; double var8 = this.playerEntity.posZ - ((double)var3.getZ() + 0.5D); double var10 = var4 * var4 + var6 * var6 + var8 * var8; if (var10 > 36.0D) { return; } else if (var3.getY() >= this.serverController.getBuildLimit()) { return; } else { if (packetIn.func_180762_c() == C07PacketPlayerDigging.Action.START_DESTROY_BLOCK) { if (!this.serverController.isBlockProtected(var2, var3, this.playerEntity) && var2.getWorldBorder().contains(var3)) { this.playerEntity.theItemInWorldManager.func_180784_a(var3, packetIn.func_179714_b()); } else { this.playerEntity.playerNetServerHandler.sendPacket(new S23PacketBlockChange(var2, var3)); } } else { if (packetIn.func_180762_c() == C07PacketPlayerDigging.Action.STOP_DESTROY_BLOCK) { this.playerEntity.theItemInWorldManager.func_180785_a(var3); } else if (packetIn.func_180762_c() == C07PacketPlayerDigging.Action.ABORT_DESTROY_BLOCK) { this.playerEntity.theItemInWorldManager.func_180238_e(); } if (var2.getBlockState(var3).getBlock().getMaterial() != Material.air) { this.playerEntity.playerNetServerHandler.sendPacket(new S23PacketBlockChange(var2, var3)); } } return; } default: throw new IllegalArgumentException("Invalid player action"); } } /** * Processes block placement and block activation (anvil, furnace, etc.) */ public void processPlayerBlockPlacement(C08PacketPlayerBlockPlacement packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); WorldServer var2 = this.serverController.worldServerForDimension(this.playerEntity.dimension); ItemStack var3 = this.playerEntity.inventory.getCurrentItem(); boolean var4 = false; BlockPos var5 = packetIn.func_179724_a(); EnumFacing var6 = EnumFacing.getFront(packetIn.getPlacedBlockDirection()); this.playerEntity.markPlayerActive(); if (packetIn.getPlacedBlockDirection() == 255) { if (var3 == null) { return; } this.playerEntity.theItemInWorldManager.tryUseItem(this.playerEntity, var2, var3); } else if (var5.getY() >= this.serverController.getBuildLimit() - 1 && (var6 == EnumFacing.UP || var5.getY() >= this.serverController.getBuildLimit())) { ChatComponentTranslation var7 = new ChatComponentTranslation("build.tooHigh", new Object[] {Integer.valueOf(this.serverController.getBuildLimit())}); var7.getChatStyle().setColor(EnumChatFormatting.RED); this.playerEntity.playerNetServerHandler.sendPacket(new S02PacketChat(var7)); var4 = true; } else { if (this.hasMoved && this.playerEntity.getDistanceSq((double)var5.getX() + 0.5D, (double)var5.getY() + 0.5D, (double)var5.getZ() + 0.5D) < 64.0D && !this.serverController.isBlockProtected(var2, var5, this.playerEntity) && var2.getWorldBorder().contains(var5)) { this.playerEntity.theItemInWorldManager.func_180236_a(this.playerEntity, var2, var3, var5, var6, packetIn.getPlacedBlockOffsetX(), packetIn.getPlacedBlockOffsetY(), packetIn.getPlacedBlockOffsetZ()); } var4 = true; } if (var4) { this.playerEntity.playerNetServerHandler.sendPacket(new S23PacketBlockChange(var2, var5)); this.playerEntity.playerNetServerHandler.sendPacket(new S23PacketBlockChange(var2, var5.offset(var6))); } var3 = this.playerEntity.inventory.getCurrentItem(); if (var3 != null && var3.stackSize == 0) { this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem] = null; var3 = null; } if (var3 == null || var3.getMaxItemUseDuration() == 0) { this.playerEntity.isChangingQuantityOnly = true; this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem] = ItemStack.copyItemStack(this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem]); Slot var8 = this.playerEntity.openContainer.getSlotFromInventory(this.playerEntity.inventory, this.playerEntity.inventory.currentItem); this.playerEntity.openContainer.detectAndSendChanges(); this.playerEntity.isChangingQuantityOnly = false; if (!ItemStack.areItemStacksEqual(this.playerEntity.inventory.getCurrentItem(), packetIn.getStack())) { this.sendPacket(new S2FPacketSetSlot(this.playerEntity.openContainer.windowId, var8.slotNumber, this.playerEntity.inventory.getCurrentItem())); } } } public void func_175088_a(C18PacketSpectate p_175088_1_) { PacketThreadUtil.func_180031_a(p_175088_1_, this, this.playerEntity.getServerForPlayer()); if (this.playerEntity.func_175149_v()) { Entity var2 = null; WorldServer[] var3 = this.serverController.worldServers; int var4 = var3.length; for (int var5 = 0; var5 < var4; ++var5) { WorldServer var6 = var3[var5]; if (var6 != null) { var2 = p_175088_1_.func_179727_a(var6); if (var2 != null) { break; } } } if (var2 != null) { this.playerEntity.func_175399_e(this.playerEntity); this.playerEntity.mountEntity((Entity)null); if (var2.worldObj != this.playerEntity.worldObj) { WorldServer var7 = this.playerEntity.getServerForPlayer(); WorldServer var8 = (WorldServer)var2.worldObj; this.playerEntity.dimension = var2.dimension; this.sendPacket(new S07PacketRespawn(this.playerEntity.dimension, var7.getDifficulty(), var7.getWorldInfo().getTerrainType(), this.playerEntity.theItemInWorldManager.getGameType())); var7.removePlayerEntityDangerously(this.playerEntity); this.playerEntity.isDead = false; this.playerEntity.setLocationAndAngles(var2.posX, var2.posY, var2.posZ, var2.rotationYaw, var2.rotationPitch); if (this.playerEntity.isEntityAlive()) { var7.updateEntityWithOptionalForce(this.playerEntity, false); var8.spawnEntityInWorld(this.playerEntity); var8.updateEntityWithOptionalForce(this.playerEntity, false); } this.playerEntity.setWorld(var8); this.serverController.getConfigurationManager().func_72375_a(this.playerEntity, var7); this.playerEntity.setPositionAndUpdate(var2.posX, var2.posY, var2.posZ); this.playerEntity.theItemInWorldManager.setWorld(var8); this.serverController.getConfigurationManager().updateTimeAndWeatherForPlayer(this.playerEntity, var8); this.serverController.getConfigurationManager().syncPlayerInventory(this.playerEntity); } else { this.playerEntity.setPositionAndUpdate(var2.posX, var2.posY, var2.posZ); } } } } public void func_175086_a(C19PacketResourcePackStatus p_175086_1_) {} /** * Invoked when disconnecting, the parameter is a ChatComponent describing the reason for termination */ public void onDisconnect(IChatComponent reason) { logger.info(this.playerEntity.getName() + " lost connection: " + reason); this.serverController.refreshStatusNextTick(); ChatComponentTranslation var2 = new ChatComponentTranslation("multiplayer.player.left", new Object[] {this.playerEntity.getDisplayName()}); var2.getChatStyle().setColor(EnumChatFormatting.YELLOW); this.serverController.getConfigurationManager().sendChatMsg(var2); this.playerEntity.mountEntityAndWakeUp(); this.serverController.getConfigurationManager().playerLoggedOut(this.playerEntity); if (this.serverController.isSinglePlayer() && this.playerEntity.getName().equals(this.serverController.getServerOwner())) { logger.info("Stopping singleplayer server as player logged out"); this.serverController.initiateShutdown(); } } public void sendPacket(final Packet packetIn) { if (packetIn instanceof S02PacketChat) { S02PacketChat var2 = (S02PacketChat)packetIn; EntityPlayer.EnumChatVisibility var3 = this.playerEntity.getChatVisibility(); if (var3 == EntityPlayer.EnumChatVisibility.HIDDEN) { return; } if (var3 == EntityPlayer.EnumChatVisibility.SYSTEM && !var2.isChat()) { return; } } try { this.netManager.sendPacket(packetIn); } catch (Throwable var5) { CrashReport var6 = CrashReport.makeCrashReport(var5, "Sending packet"); CrashReportCategory var4 = var6.makeCategory("Packet being sent"); var4.addCrashSectionCallable("Packet class", new Callable() { private static final String __OBFID = "CL_00002270"; public String func_180225_a() { return packetIn.getClass().getCanonicalName(); } public Object call() { return this.func_180225_a(); } }); throw new ReportedException(var6); } } /** * Updates which quickbar slot is selected */ public void processHeldItemChange(C09PacketHeldItemChange packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); if (packetIn.getSlotId() >= 0 && packetIn.getSlotId() < InventoryPlayer.getHotbarSize()) { this.playerEntity.inventory.currentItem = packetIn.getSlotId(); this.playerEntity.markPlayerActive(); } else { logger.warn(this.playerEntity.getName() + " tried to set an invalid carried item"); } } /** * Process chat messages (broadcast back to clients) and commands (executes) */ public void processChatMessage(C01PacketChatMessage packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); if (this.playerEntity.getChatVisibility() == EntityPlayer.EnumChatVisibility.HIDDEN) { ChatComponentTranslation var4 = new ChatComponentTranslation("chat.cannotSend", new Object[0]); var4.getChatStyle().setColor(EnumChatFormatting.RED); this.sendPacket(new S02PacketChat(var4)); } else { this.playerEntity.markPlayerActive(); String var2 = packetIn.getMessage(); var2 = StringUtils.normalizeSpace(var2); for (int var3 = 0; var3 < var2.length(); ++var3) { if (!ChatAllowedCharacters.isAllowedCharacter(var2.charAt(var3))) { this.kickPlayerFromServer("Illegal characters in chat"); return; } } if (var2.startsWith("/")) { this.handleSlashCommand(var2); } else { ChatComponentTranslation var5 = new ChatComponentTranslation("chat.type.text", new Object[] {this.playerEntity.getDisplayName(), var2}); this.serverController.getConfigurationManager().sendChatMsgImpl(var5, false); } this.chatSpamThresholdCount += 20; if (this.chatSpamThresholdCount > 200 && !this.serverController.getConfigurationManager().canSendCommands(this.playerEntity.getGameProfile())) { this.kickPlayerFromServer("disconnect.spam"); } } } /** * Handle commands that start with a / */ private void handleSlashCommand(String command) { this.serverController.getCommandManager().executeCommand(this.playerEntity, command); } public void func_175087_a(C0APacketAnimation p_175087_1_) { PacketThreadUtil.func_180031_a(p_175087_1_, this, this.playerEntity.getServerForPlayer()); this.playerEntity.markPlayerActive(); this.playerEntity.swingItem(); } /** * Processes a range of action-types: sneaking, sprinting, waking from sleep, opening the inventory or setting jump * height of the horse the player is riding */ public void processEntityAction(C0BPacketEntityAction packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); this.playerEntity.markPlayerActive(); switch (NetHandlerPlayServer.SwitchAction.field_180222_b[packetIn.func_180764_b().ordinal()]) { case 1: this.playerEntity.setSneaking(true); break; case 2: this.playerEntity.setSneaking(false); break; case 3: this.playerEntity.setSprinting(true); break; case 4: this.playerEntity.setSprinting(false); break; case 5: this.playerEntity.wakeUpPlayer(false, true, true); this.hasMoved = false; break; case 6: if (this.playerEntity.ridingEntity instanceof EntityHorse) { ((EntityHorse)this.playerEntity.ridingEntity).setJumpPower(packetIn.func_149512_e()); } break; case 7: if (this.playerEntity.ridingEntity instanceof EntityHorse) { ((EntityHorse)this.playerEntity.ridingEntity).openGUI(this.playerEntity); } break; default: throw new IllegalArgumentException("Invalid client command!"); } } /** * Processes interactions ((un)leashing, opening command block GUI) and attacks on an entity with players currently * equipped item */ public void processUseEntity(C02PacketUseEntity packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); WorldServer var2 = this.serverController.worldServerForDimension(this.playerEntity.dimension); Entity var3 = packetIn.getEntityFromWorld(var2); this.playerEntity.markPlayerActive(); if (var3 != null) { boolean var4 = this.playerEntity.canEntityBeSeen(var3); double var5 = 36.0D; if (!var4) { var5 = 9.0D; } if (this.playerEntity.getDistanceSqToEntity(var3) < var5) { if (packetIn.getAction() == C02PacketUseEntity.Action.INTERACT) { this.playerEntity.interactWith(var3); } else if (packetIn.getAction() == C02PacketUseEntity.Action.INTERACT_AT) { var3.func_174825_a(this.playerEntity, packetIn.func_179712_b()); } else if (packetIn.getAction() == C02PacketUseEntity.Action.ATTACK) { if (var3 instanceof EntityItem || var3 instanceof EntityXPOrb || var3 instanceof EntityArrow || var3 == this.playerEntity) { this.kickPlayerFromServer("Attempting to attack an invalid entity"); this.serverController.logWarning("Player " + this.playerEntity.getName() + " tried to attack an invalid entity"); return; } this.playerEntity.attackTargetEntityWithCurrentItem(var3); } } } } /** * Processes the client status updates: respawn attempt from player, opening statistics or achievements, or * acquiring 'open inventory' achievement */ public void processClientStatus(C16PacketClientStatus packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); this.playerEntity.markPlayerActive(); C16PacketClientStatus.EnumState var2 = packetIn.getStatus(); switch (NetHandlerPlayServer.SwitchAction.field_180223_c[var2.ordinal()]) { case 1: if (this.playerEntity.playerConqueredTheEnd) { this.playerEntity = this.serverController.getConfigurationManager().recreatePlayerEntity(this.playerEntity, 0, true); } else if (this.playerEntity.getServerForPlayer().getWorldInfo().isHardcoreModeEnabled()) { if (this.serverController.isSinglePlayer() && this.playerEntity.getName().equals(this.serverController.getServerOwner())) { this.playerEntity.playerNetServerHandler.kickPlayerFromServer("You have died. Game over, man, it\'s game over!"); this.serverController.deleteWorldAndStopServer(); } else { UserListBansEntry var3 = new UserListBansEntry(this.playerEntity.getGameProfile(), (Date)null, "(You just lost the game)", (Date)null, "Death in Hardcore"); this.serverController.getConfigurationManager().getBannedPlayers().addEntry(var3); this.playerEntity.playerNetServerHandler.kickPlayerFromServer("You have died. Game over, man, it\'s game over!"); } } else { if (this.playerEntity.getHealth() > 0.0F) { return; } this.playerEntity = this.serverController.getConfigurationManager().recreatePlayerEntity(this.playerEntity, 0, false); } break; case 2: this.playerEntity.getStatFile().func_150876_a(this.playerEntity); break; case 3: this.playerEntity.triggerAchievement(AchievementList.openInventory); } } /** * Processes the client closing windows (container) */ public void processCloseWindow(C0DPacketCloseWindow packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); this.playerEntity.closeContainer(); } /** * Executes a container/inventory slot manipulation as indicated by the packet. Sends the serverside result if they * didn't match the indicated result and prevents further manipulation by the player until he confirms that it has * the same open container/inventory */ public void processClickWindow(C0EPacketClickWindow packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); this.playerEntity.markPlayerActive(); if (this.playerEntity.openContainer.windowId == packetIn.getWindowId() && this.playerEntity.openContainer.getCanCraft(this.playerEntity)) { if (this.playerEntity.func_175149_v()) { ArrayList var2 = Lists.newArrayList(); for (int var3 = 0; var3 < this.playerEntity.openContainer.inventorySlots.size(); ++var3) { var2.add(((Slot)this.playerEntity.openContainer.inventorySlots.get(var3)).getStack()); } this.playerEntity.updateCraftingInventory(this.playerEntity.openContainer, var2); } else { ItemStack var5 = this.playerEntity.openContainer.slotClick(packetIn.getSlotId(), packetIn.getUsedButton(), packetIn.getMode(), this.playerEntity); if (ItemStack.areItemStacksEqual(packetIn.getClickedItem(), var5)) { this.playerEntity.playerNetServerHandler.sendPacket(new S32PacketConfirmTransaction(packetIn.getWindowId(), packetIn.getActionNumber(), true)); this.playerEntity.isChangingQuantityOnly = true; this.playerEntity.openContainer.detectAndSendChanges(); this.playerEntity.updateHeldItem(); this.playerEntity.isChangingQuantityOnly = false; } else { this.field_147372_n.addKey(this.playerEntity.openContainer.windowId, Short.valueOf(packetIn.getActionNumber())); this.playerEntity.playerNetServerHandler.sendPacket(new S32PacketConfirmTransaction(packetIn.getWindowId(), packetIn.getActionNumber(), false)); this.playerEntity.openContainer.setCanCraft(this.playerEntity, false); ArrayList var6 = Lists.newArrayList(); for (int var4 = 0; var4 < this.playerEntity.openContainer.inventorySlots.size(); ++var4) { var6.add(((Slot)this.playerEntity.openContainer.inventorySlots.get(var4)).getStack()); } this.playerEntity.updateCraftingInventory(this.playerEntity.openContainer, var6); } } } } /** * Enchants the item identified by the packet given some convoluted conditions (matching window, which * should/shouldn't be in use?) */ public void processEnchantItem(C11PacketEnchantItem packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); this.playerEntity.markPlayerActive(); if (this.playerEntity.openContainer.windowId == packetIn.getId() && this.playerEntity.openContainer.getCanCraft(this.playerEntity) && !this.playerEntity.func_175149_v()) { this.playerEntity.openContainer.enchantItem(this.playerEntity, packetIn.getButton()); this.playerEntity.openContainer.detectAndSendChanges(); } } /** * Update the server with an ItemStack in a slot. */ public void processCreativeInventoryAction(C10PacketCreativeInventoryAction packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); if (this.playerEntity.theItemInWorldManager.isCreative()) { boolean var2 = packetIn.getSlotId() < 0; ItemStack var3 = packetIn.getStack(); if (var3 != null && var3.hasTagCompound() && var3.getTagCompound().hasKey("BlockEntityTag", 10)) { NBTTagCompound var4 = var3.getTagCompound().getCompoundTag("BlockEntityTag"); if (var4.hasKey("x") && var4.hasKey("y") && var4.hasKey("z")) { BlockPos var5 = new BlockPos(var4.getInteger("x"), var4.getInteger("y"), var4.getInteger("z")); TileEntity var6 = this.playerEntity.worldObj.getTileEntity(var5); if (var6 != null) { NBTTagCompound var7 = new NBTTagCompound(); var6.writeToNBT(var7); var7.removeTag("x"); var7.removeTag("y"); var7.removeTag("z"); var3.setTagInfo("BlockEntityTag", var7); } } } boolean var8 = packetIn.getSlotId() >= 1 && packetIn.getSlotId() < 36 + InventoryPlayer.getHotbarSize(); boolean var9 = var3 == null || var3.getItem() != null; boolean var10 = var3 == null || var3.getMetadata() >= 0 && var3.stackSize <= 64 && var3.stackSize > 0; if (var8 && var9 && var10) { if (var3 == null) { this.playerEntity.inventoryContainer.putStackInSlot(packetIn.getSlotId(), (ItemStack)null); } else { this.playerEntity.inventoryContainer.putStackInSlot(packetIn.getSlotId(), var3); } this.playerEntity.inventoryContainer.setCanCraft(this.playerEntity, true); } else if (var2 && var9 && var10 && this.itemDropThreshold < 200) { this.itemDropThreshold += 20; EntityItem var11 = this.playerEntity.dropPlayerItemWithRandomChoice(var3, true); if (var11 != null) { var11.setAgeToCreativeDespawnTime(); } } } } /** * Received in response to the server requesting to confirm that the client-side open container matches the servers' * after a mismatched container-slot manipulation. It will unlock the player's ability to manipulate the container * contents */ public void processConfirmTransaction(C0FPacketConfirmTransaction packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); Short var2 = (Short)this.field_147372_n.lookup(this.playerEntity.openContainer.windowId); if (var2 != null && packetIn.getUid() == var2.shortValue() && this.playerEntity.openContainer.windowId == packetIn.getId() && !this.playerEntity.openContainer.getCanCraft(this.playerEntity) && !this.playerEntity.func_175149_v()) { this.playerEntity.openContainer.setCanCraft(this.playerEntity, true); } } public void processUpdateSign(C12PacketUpdateSign packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); this.playerEntity.markPlayerActive(); WorldServer var2 = this.serverController.worldServerForDimension(this.playerEntity.dimension); BlockPos var3 = packetIn.func_179722_a(); if (var2.isBlockLoaded(var3)) { TileEntity var4 = var2.getTileEntity(var3); if (!(var4 instanceof TileEntitySign)) { return; } TileEntitySign var5 = (TileEntitySign)var4; if (!var5.getIsEditable() || var5.func_145911_b() != this.playerEntity) { this.serverController.logWarning("Player " + this.playerEntity.getName() + " just tried to change non-editable sign"); return; } System.arraycopy(packetIn.func_180768_b(), 0, var5.signText, 0, 4); var5.markDirty(); var2.markBlockForUpdate(var3); } } /** * Updates a players' ping statistics */ public void processKeepAlive(C00PacketKeepAlive packetIn) { if (packetIn.getKey() == this.field_147378_h) { int var2 = (int)(this.currentTimeMillis() - this.lastPingTime); this.playerEntity.ping = (this.playerEntity.ping * 3 + var2) / 4; } } private long currentTimeMillis() { return System.nanoTime() / 1000000L; } /** * Processes a player starting/stopping flying */ public void processPlayerAbilities(C13PacketPlayerAbilities packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); this.playerEntity.capabilities.isFlying = packetIn.isFlying() && this.playerEntity.capabilities.allowFlying; } /** * Retrieves possible tab completions for the requested command string and sends them to the client */ public void processTabComplete(C14PacketTabComplete packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); ArrayList var2 = Lists.newArrayList(); Iterator var3 = this.serverController.func_180506_a(this.playerEntity, packetIn.getMessage(), packetIn.func_179709_b()).iterator(); while (var3.hasNext()) { String var4 = (String)var3.next(); var2.add(var4); } this.playerEntity.playerNetServerHandler.sendPacket(new S3APacketTabComplete((String[])var2.toArray(new String[var2.size()]))); } /** * Updates serverside copy of client settings: language, render distance, chat visibility, chat colours, difficulty, * and whether to show the cape */ public void processClientSettings(C15PacketClientSettings packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); this.playerEntity.handleClientSettings(packetIn); } /** * Synchronizes serverside and clientside book contents and signing */ public void processVanilla250Packet(C17PacketCustomPayload packetIn) { PacketThreadUtil.func_180031_a(packetIn, this, this.playerEntity.getServerForPlayer()); PacketBuffer var2; ItemStack var3; ItemStack var4; if ("MC|BEdit".equals(packetIn.getChannelName())) { var2 = new PacketBuffer(Unpooled.wrappedBuffer(packetIn.getBufferData())); try { var3 = var2.readItemStackFromBuffer(); if (var3 == null) { return; } if (!ItemWritableBook.validBookPageTagContents(var3.getTagCompound())) { throw new IOException("Invalid book tag!"); } var4 = this.playerEntity.inventory.getCurrentItem(); if (var4 != null) { if (var3.getItem() == Items.writable_book && var3.getItem() == var4.getItem()) { var4.setTagInfo("pages", var3.getTagCompound().getTagList("pages", 8)); } return; } } catch (Exception var38) { logger.error("Couldn\'t handle book info", var38); return; } finally { var2.release(); } return; } else if ("MC|BSign".equals(packetIn.getChannelName())) { var2 = new PacketBuffer(Unpooled.wrappedBuffer(packetIn.getBufferData())); try { var3 = var2.readItemStackFromBuffer(); if (var3 != null) { if (!ItemEditableBook.validBookTagContents(var3.getTagCompound())) { throw new IOException("Invalid book tag!"); } var4 = this.playerEntity.inventory.getCurrentItem(); if (var4 == null) { return; } if (var3.getItem() == Items.written_book && var4.getItem() == Items.writable_book) { var4.setTagInfo("author", new NBTTagString(this.playerEntity.getName())); var4.setTagInfo("title", new NBTTagString(var3.getTagCompound().getString("title"))); var4.setTagInfo("pages", var3.getTagCompound().getTagList("pages", 8)); var4.setItem(Items.written_book); } return; } } catch (Exception var36) { logger.error("Couldn\'t sign book", var36); return; } finally { var2.release(); } return; } else if ("MC|TrSel".equals(packetIn.getChannelName())) { try { int var40 = packetIn.getBufferData().readInt(); Container var42 = this.playerEntity.openContainer; if (var42 instanceof ContainerMerchant) { ((ContainerMerchant)var42).setCurrentRecipeIndex(var40); } } catch (Exception var35) { logger.error("Couldn\'t select trade", var35); } } else if ("MC|AdvCdm".equals(packetIn.getChannelName())) { if (!this.serverController.isCommandBlockEnabled()) { this.playerEntity.addChatMessage(new ChatComponentTranslation("advMode.notEnabled", new Object[0])); } else if (this.playerEntity.canCommandSenderUseCommand(2, "") && this.playerEntity.capabilities.isCreativeMode) { var2 = packetIn.getBufferData(); try { byte var43 = var2.readByte(); CommandBlockLogic var46 = null; if (var43 == 0) { TileEntity var5 = this.playerEntity.worldObj.getTileEntity(new BlockPos(var2.readInt(), var2.readInt(), var2.readInt())); if (var5 instanceof TileEntityCommandBlock) { var46 = ((TileEntityCommandBlock)var5).getCommandBlockLogic(); } } else if (var43 == 1) { Entity var48 = this.playerEntity.worldObj.getEntityByID(var2.readInt()); if (var48 instanceof EntityMinecartCommandBlock) { var46 = ((EntityMinecartCommandBlock)var48).func_145822_e(); } } String var49 = var2.readStringFromBuffer(var2.readableBytes()); boolean var6 = var2.readBoolean(); if (var46 != null) { var46.setCommand(var49); var46.func_175573_a(var6); if (!var6) { var46.func_145750_b((IChatComponent)null); } var46.func_145756_e(); this.playerEntity.addChatMessage(new ChatComponentTranslation("advMode.setCommand.success", new Object[] {var49})); } } catch (Exception var33) { logger.error("Couldn\'t set command block", var33); } finally { var2.release(); } } else { this.playerEntity.addChatMessage(new ChatComponentTranslation("advMode.notAllowed", new Object[0])); } } else if ("MC|Beacon".equals(packetIn.getChannelName())) { if (this.playerEntity.openContainer instanceof ContainerBeacon) { try { var2 = packetIn.getBufferData(); int var44 = var2.readInt(); int var47 = var2.readInt(); ContainerBeacon var50 = (ContainerBeacon)this.playerEntity.openContainer; Slot var51 = var50.getSlot(0); if (var51.getHasStack()) { var51.decrStackSize(1); IInventory var7 = var50.func_180611_e(); var7.setField(1, var44); var7.setField(2, var47); var7.markDirty(); } } catch (Exception var32) { logger.error("Couldn\'t set beacon", var32); } } } else if ("MC|ItemName".equals(packetIn.getChannelName()) && this.playerEntity.openContainer instanceof ContainerRepair) { ContainerRepair var41 = (ContainerRepair)this.playerEntity.openContainer; if (packetIn.getBufferData() != null && packetIn.getBufferData().readableBytes() >= 1) { String var45 = ChatAllowedCharacters.filterAllowedCharacters(packetIn.getBufferData().readStringFromBuffer(32767)); if (var45.length() <= 30) { var41.updateItemName(var45); } } else { var41.updateItemName(""); } } } static final class SwitchAction { static final int[] field_180224_a; static final int[] field_180222_b; static final int[] field_180223_c = new int[C16PacketClientStatus.EnumState.values().length]; private static final String __OBFID = "CL_00002269"; static { try { field_180223_c[C16PacketClientStatus.EnumState.PERFORM_RESPAWN.ordinal()] = 1; } catch (NoSuchFieldError var16) { ; } try { field_180223_c[C16PacketClientStatus.EnumState.REQUEST_STATS.ordinal()] = 2; } catch (NoSuchFieldError var15) { ; } try { field_180223_c[C16PacketClientStatus.EnumState.OPEN_INVENTORY_ACHIEVEMENT.ordinal()] = 3; } catch (NoSuchFieldError var14) { ; } field_180222_b = new int[C0BPacketEntityAction.Action.values().length]; try { field_180222_b[C0BPacketEntityAction.Action.START_SNEAKING.ordinal()] = 1; } catch (NoSuchFieldError var13) { ; } try { field_180222_b[C0BPacketEntityAction.Action.STOP_SNEAKING.ordinal()] = 2; } catch (NoSuchFieldError var12) { ; } try { field_180222_b[C0BPacketEntityAction.Action.START_SPRINTING.ordinal()] = 3; } catch (NoSuchFieldError var11) { ; } try { field_180222_b[C0BPacketEntityAction.Action.STOP_SPRINTING.ordinal()] = 4; } catch (NoSuchFieldError var10) { ; } try { field_180222_b[C0BPacketEntityAction.Action.STOP_SLEEPING.ordinal()] = 5; } catch (NoSuchFieldError var9) { ; } try { field_180222_b[C0BPacketEntityAction.Action.RIDING_JUMP.ordinal()] = 6; } catch (NoSuchFieldError var8) { ; } try { field_180222_b[C0BPacketEntityAction.Action.OPEN_INVENTORY.ordinal()] = 7; } catch (NoSuchFieldError var7) { ; } field_180224_a = new int[C07PacketPlayerDigging.Action.values().length]; try { field_180224_a[C07PacketPlayerDigging.Action.DROP_ITEM.ordinal()] = 1; } catch (NoSuchFieldError var6) { ; } try { field_180224_a[C07PacketPlayerDigging.Action.DROP_ALL_ITEMS.ordinal()] = 2; } catch (NoSuchFieldError var5) { ; } try { field_180224_a[C07PacketPlayerDigging.Action.RELEASE_USE_ITEM.ordinal()] = 3; } catch (NoSuchFieldError var4) { ; } try { field_180224_a[C07PacketPlayerDigging.Action.START_DESTROY_BLOCK.ordinal()] = 4; } catch (NoSuchFieldError var3) { ; } try { field_180224_a[C07PacketPlayerDigging.Action.ABORT_DESTROY_BLOCK.ordinal()] = 5; } catch (NoSuchFieldError var2) { ; } try { field_180224_a[C07PacketPlayerDigging.Action.STOP_DESTROY_BLOCK.ordinal()] = 6; } catch (NoSuchFieldError var1) { ; } } } }