package net.minecraft.client.network;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import java.util.UUID;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.google.common.collect.Maps;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.mojang.authlib.GameProfile;
import io.netty.buffer.Unpooled;
import net.minecraft.block.Block;
import net.minecraft.client.ClientBrandRetriever;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.GuardianSound;
import net.minecraft.client.entity.EntityOtherPlayerMP;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.GuiChat;
import net.minecraft.client.gui.GuiDisconnected;
import net.minecraft.client.gui.GuiDownloadTerrain;
import net.minecraft.client.gui.GuiMainMenu;
import net.minecraft.client.gui.GuiMerchant;
import net.minecraft.client.gui.GuiMultiplayer;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiScreenBook;
import net.minecraft.client.gui.GuiScreenDemo;
import net.minecraft.client.gui.GuiScreenRealmsProxy;
import net.minecraft.client.gui.GuiWinGame;
import net.minecraft.client.gui.GuiYesNo;
import net.minecraft.client.gui.GuiYesNoCallback;
import net.minecraft.client.gui.IProgressMeter;
import net.minecraft.client.gui.inventory.GuiContainerCreative;
import net.minecraft.client.multiplayer.PlayerControllerMP;
import net.minecraft.client.multiplayer.ServerData;
import net.minecraft.client.multiplayer.ServerList;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.client.particle.EntityPickupFX;
import net.minecraft.client.player.inventory.ContainerLocalMenu;
import net.minecraft.client.player.inventory.LocalBlockIntercommunication;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.client.stream.MetadataAchievement;
import net.minecraft.client.stream.MetadataCombat;
import net.minecraft.client.stream.MetadataPlayerDeath;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLeashKnot;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.IMerchant;
import net.minecraft.entity.NpcMerchant;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.ai.attributes.BaseAttributeMap;
import net.minecraft.entity.ai.attributes.IAttribute;
import net.minecraft.entity.ai.attributes.IAttributeInstance;
import net.minecraft.entity.ai.attributes.RangedAttribute;
import net.minecraft.entity.effect.EntityLightningBolt;
import net.minecraft.entity.item.EntityArmorStand;
import net.minecraft.entity.item.EntityBoat;
import net.minecraft.entity.item.EntityEnderCrystal;
import net.minecraft.entity.item.EntityEnderEye;
import net.minecraft.entity.item.EntityEnderPearl;
import net.minecraft.entity.item.EntityExpBottle;
import net.minecraft.entity.item.EntityFallingBlock;
import net.minecraft.entity.item.EntityFireworkRocket;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.item.EntityItemFrame;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.entity.item.EntityPainting;
import net.minecraft.entity.item.EntityTNTPrimed;
import net.minecraft.entity.item.EntityXPOrb;
import net.minecraft.entity.monster.EntityGuardian;
import net.minecraft.entity.passive.EntityHorse;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.entity.projectile.EntityEgg;
import net.minecraft.entity.projectile.EntityFishHook;
import net.minecraft.entity.projectile.EntityLargeFireball;
import net.minecraft.entity.projectile.EntityPotion;
import net.minecraft.entity.projectile.EntitySmallFireball;
import net.minecraft.entity.projectile.EntitySnowball;
import net.minecraft.entity.projectile.EntityWitherSkull;
import net.minecraft.init.Items;
import net.minecraft.inventory.AnimalChest;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.InventoryBasic;
import net.minecraft.item.Item;
import net.minecraft.item.ItemMap;
import net.minecraft.item.ItemStack;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.PacketBuffer;
import net.minecraft.network.PacketThreadUtil;
import net.minecraft.network.play.INetHandlerPlayClient;
import net.minecraft.network.play.client.C00PacketKeepAlive;
import net.minecraft.network.play.client.C03PacketPlayer;
import net.minecraft.network.play.client.C0FPacketConfirmTransaction;
import net.minecraft.network.play.client.C17PacketCustomPayload;
import net.minecraft.network.play.client.C19PacketResourcePackStatus;
import net.minecraft.network.play.server.S00PacketKeepAlive;
import net.minecraft.network.play.server.S01PacketJoinGame;
import net.minecraft.network.play.server.S02PacketChat;
import net.minecraft.network.play.server.S03PacketTimeUpdate;
import net.minecraft.network.play.server.S04PacketEntityEquipment;
import net.minecraft.network.play.server.S05PacketSpawnPosition;
import net.minecraft.network.play.server.S06PacketUpdateHealth;
import net.minecraft.network.play.server.S07PacketRespawn;
import net.minecraft.network.play.server.S08PacketPlayerPosLook;
import net.minecraft.network.play.server.S09PacketHeldItemChange;
import net.minecraft.network.play.server.S0APacketUseBed;
import net.minecraft.network.play.server.S0BPacketAnimation;
import net.minecraft.network.play.server.S0CPacketSpawnPlayer;
import net.minecraft.network.play.server.S0DPacketCollectItem;
import net.minecraft.network.play.server.S0EPacketSpawnObject;
import net.minecraft.network.play.server.S0FPacketSpawnMob;
import net.minecraft.network.play.server.S10PacketSpawnPainting;
import net.minecraft.network.play.server.S11PacketSpawnExperienceOrb;
import net.minecraft.network.play.server.S12PacketEntityVelocity;
import net.minecraft.network.play.server.S13PacketDestroyEntities;
import net.minecraft.network.play.server.S14PacketEntity;
import net.minecraft.network.play.server.S18PacketEntityTeleport;
import net.minecraft.network.play.server.S19PacketEntityHeadLook;
import net.minecraft.network.play.server.S19PacketEntityStatus;
import net.minecraft.network.play.server.S1BPacketEntityAttach;
import net.minecraft.network.play.server.S1CPacketEntityMetadata;
import net.minecraft.network.play.server.S1DPacketEntityEffect;
import net.minecraft.network.play.server.S1EPacketRemoveEntityEffect;
import net.minecraft.network.play.server.S1FPacketSetExperience;
import net.minecraft.network.play.server.S20PacketEntityProperties;
import net.minecraft.network.play.server.S21PacketChunkData;
import net.minecraft.network.play.server.S22PacketMultiBlockChange;
import net.minecraft.network.play.server.S23PacketBlockChange;
import net.minecraft.network.play.server.S24PacketBlockAction;
import net.minecraft.network.play.server.S25PacketBlockBreakAnim;
import net.minecraft.network.play.server.S26PacketMapChunkBulk;
import net.minecraft.network.play.server.S27PacketExplosion;
import net.minecraft.network.play.server.S28PacketEffect;
import net.minecraft.network.play.server.S29PacketSoundEffect;
import net.minecraft.network.play.server.S2APacketParticles;
import net.minecraft.network.play.server.S2BPacketChangeGameState;
import net.minecraft.network.play.server.S2CPacketSpawnGlobalEntity;
import net.minecraft.network.play.server.S2DPacketOpenWindow;
import net.minecraft.network.play.server.S2EPacketCloseWindow;
import net.minecraft.network.play.server.S2FPacketSetSlot;
import net.minecraft.network.play.server.S30PacketWindowItems;
import net.minecraft.network.play.server.S31PacketWindowProperty;
import net.minecraft.network.play.server.S32PacketConfirmTransaction;
import net.minecraft.network.play.server.S33PacketUpdateSign;
import net.minecraft.network.play.server.S34PacketMaps;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.network.play.server.S36PacketSignEditorOpen;
import net.minecraft.network.play.server.S37PacketStatistics;
import net.minecraft.network.play.server.S38PacketPlayerListItem;
import net.minecraft.network.play.server.S39PacketPlayerAbilities;
import net.minecraft.network.play.server.S3APacketTabComplete;
import net.minecraft.network.play.server.S3BPacketScoreboardObjective;
import net.minecraft.network.play.server.S3CPacketUpdateScore;
import net.minecraft.network.play.server.S3DPacketDisplayScoreboard;
import net.minecraft.network.play.server.S3EPacketTeams;
import net.minecraft.network.play.server.S3FPacketCustomPayload;
import net.minecraft.network.play.server.S40PacketDisconnect;
import net.minecraft.network.play.server.S41PacketServerDifficulty;
import net.minecraft.network.play.server.S42PacketCombatEvent;
import net.minecraft.network.play.server.S43PacketCamera;
import net.minecraft.network.play.server.S44PacketWorldBorder;
import net.minecraft.network.play.server.S45PacketTitle;
import net.minecraft.network.play.server.S46PacketSetCompressionLevel;
import net.minecraft.network.play.server.S47PacketPlayerListHeaderFooter;
import net.minecraft.network.play.server.S48PacketResourcePackSend;
import net.minecraft.network.play.server.S49PacketUpdateEntityNBT;
import net.minecraft.potion.PotionEffect;
import net.minecraft.realms.DisconnectedRealmsScreen;
import net.minecraft.scoreboard.IScoreObjectiveCriteria;
import net.minecraft.scoreboard.Score;
import net.minecraft.scoreboard.ScoreObjective;
import net.minecraft.scoreboard.ScorePlayerTeam;
import net.minecraft.scoreboard.Scoreboard;
import net.minecraft.scoreboard.Team;
import net.minecraft.stats.Achievement;
import net.minecraft.stats.AchievementList;
import net.minecraft.stats.StatBase;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityBanner;
import net.minecraft.tileentity.TileEntityBeacon;
import net.minecraft.tileentity.TileEntityCommandBlock;
import net.minecraft.tileentity.TileEntityFlowerPot;
import net.minecraft.tileentity.TileEntityMobSpawner;
import net.minecraft.tileentity.TileEntitySign;
import net.minecraft.tileentity.TileEntitySkull;
import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.IChatComponent;
import net.minecraft.util.MathHelper;
import net.minecraft.util.StringUtils;
import net.minecraft.village.MerchantRecipeList;
import net.minecraft.world.Explosion;
import net.minecraft.world.WorldProviderSurface;
import net.minecraft.world.WorldSettings;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.storage.MapData;
public class NetHandlerPlayClient implements INetHandlerPlayClient
{
private static final Logger logger = LogManager.getLogger();
/**
* The NetworkManager instance used to communicate with the server (used only by handlePlayerPosLook to update positioning and handleJoinGame to inform the server of the client distribution/mods)
*/
private final NetworkManager netManager;
private final GameProfile field_175107_d;
/**
* Seems to be either null (integrated server) or an instance of either GuiMultiplayer (when connecting to a server) or GuiScreenReamlsTOS (when connecting to MCO server)
*/
private final GuiScreen guiScreenServer;
/**
* Reference to the Minecraft instance, which many handler methods operate on
*/
private Minecraft gameController;
/**
* Reference to the current ClientWorld instance, which many handler methods operate on
*/
private WorldClient clientWorldController;
/**
* True if the client has finished downloading terrain and may spawn. Set upon receipt of S08PacketPlayerPosLook, reset upon respawning
*/
private boolean doneLoadingTerrain;
/**
* A mapping from player names to their respective GuiPlayerInfo (specifies the clients response time to the server)
*/
private final Map playerInfoMap = Maps.newHashMap();
public int currentServerMaxPlayers = 20;
private boolean field_147308_k = false;
/**
* Just an ordinary random number generator, used to randomize audio pitch of item/orb pickup and randomize both particlespawn offset and velocity
*/
private final Random avRandomizer = new Random();
private static final String __OBFID = "CL_00000878";
public NetHandlerPlayClient(final Minecraft mcIn, final GuiScreen p_i46300_2_, final NetworkManager p_i46300_3_, final GameProfile p_i46300_4_)
{
this.gameController = mcIn;
this.guiScreenServer = p_i46300_2_;
this.netManager = p_i46300_3_;
this.field_175107_d = p_i46300_4_;
}
/**
* Clears the WorldClient instance associated with this NetHandlerPlayClient
*/
public void cleanup()
{
this.clientWorldController = null;
}
/**
* Registers some server properties (gametype,hardcore-mode,terraintype,difficulty,player limit), creates a new WorldClient and sets the player initial dimension
*/
@Override
public void handleJoinGame(final S01PacketJoinGame packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
this.gameController.playerController = new PlayerControllerMP(this.gameController, this);
this.clientWorldController = new WorldClient(this, new WorldSettings(0L, packetIn.func_149198_e(), false, packetIn.func_149195_d(), packetIn.func_149196_i()), packetIn.func_149194_f(), packetIn.func_149192_g(), this.gameController.mcProfiler);
this.gameController.gameSettings.difficulty = packetIn.func_149192_g();
this.gameController.loadWorld(this.clientWorldController);
this.gameController.thePlayer.dimension = packetIn.func_149194_f();
this.gameController.displayGuiScreen(new GuiDownloadTerrain(this));
this.gameController.thePlayer.setEntityId(packetIn.func_149197_c());
this.currentServerMaxPlayers = packetIn.func_149193_h();
this.gameController.thePlayer.func_175150_k(packetIn.func_179744_h());
this.gameController.playerController.setGameType(packetIn.func_149198_e());
this.gameController.gameSettings.sendSettingsToServer();
this.netManager.sendPacket(new C17PacketCustomPayload("MC|Brand", (new PacketBuffer(Unpooled.buffer())).writeString(ClientBrandRetriever.getClientModName())));
}
/**
* Spawns an instance of the objecttype indicated by the packet and sets its position and momentum
*/
@Override
public void handleSpawnObject(final S0EPacketSpawnObject packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final double var2 = packetIn.func_148997_d() / 32.0D;
final double var4 = packetIn.func_148998_e() / 32.0D;
final double var6 = packetIn.func_148994_f() / 32.0D;
Object var8 = null;
if (packetIn.func_148993_l() == 10)
var8 = EntityMinecart.func_180458_a(this.clientWorldController, var2, var4, var6, EntityMinecart.EnumMinecartType.func_180038_a(packetIn.func_149009_m()));
else if (packetIn.func_148993_l() == 90)
{
final Entity var9 = this.clientWorldController.getEntityByID(packetIn.func_149009_m());
if (var9 instanceof EntityPlayer)
var8 = new EntityFishHook(this.clientWorldController, var2, var4, var6, (EntityPlayer) var9);
packetIn.func_149002_g(0);
}
else if (packetIn.func_148993_l() == 60)
var8 = new EntityArrow(this.clientWorldController, var2, var4, var6);
else if (packetIn.func_148993_l() == 61)
var8 = new EntitySnowball(this.clientWorldController, var2, var4, var6);
else if (packetIn.func_148993_l() == 71)
{
var8 = new EntityItemFrame(this.clientWorldController, new BlockPos(MathHelper.floor_double(var2), MathHelper.floor_double(var4), MathHelper.floor_double(var6)), EnumFacing.getHorizontal(packetIn.func_149009_m()));
packetIn.func_149002_g(0);
}
else if (packetIn.func_148993_l() == 77)
{
var8 = new EntityLeashKnot(this.clientWorldController, new BlockPos(MathHelper.floor_double(var2), MathHelper.floor_double(var4), MathHelper.floor_double(var6)));
packetIn.func_149002_g(0);
}
else if (packetIn.func_148993_l() == 65)
var8 = new EntityEnderPearl(this.clientWorldController, var2, var4, var6);
else if (packetIn.func_148993_l() == 72)
var8 = new EntityEnderEye(this.clientWorldController, var2, var4, var6);
else if (packetIn.func_148993_l() == 76)
var8 = new EntityFireworkRocket(this.clientWorldController, var2, var4, var6, (ItemStack) null);
else if (packetIn.func_148993_l() == 63)
{
var8 = new EntityLargeFireball(this.clientWorldController, var2, var4, var6, packetIn.func_149010_g() / 8000.0D, packetIn.func_149004_h() / 8000.0D, packetIn.func_148999_i() / 8000.0D);
packetIn.func_149002_g(0);
}
else if (packetIn.func_148993_l() == 64)
{
var8 = new EntitySmallFireball(this.clientWorldController, var2, var4, var6, packetIn.func_149010_g() / 8000.0D, packetIn.func_149004_h() / 8000.0D, packetIn.func_148999_i() / 8000.0D);
packetIn.func_149002_g(0);
}
else if (packetIn.func_148993_l() == 66)
{
var8 = new EntityWitherSkull(this.clientWorldController, var2, var4, var6, packetIn.func_149010_g() / 8000.0D, packetIn.func_149004_h() / 8000.0D, packetIn.func_148999_i() / 8000.0D);
packetIn.func_149002_g(0);
}
else if (packetIn.func_148993_l() == 62)
var8 = new EntityEgg(this.clientWorldController, var2, var4, var6);
else if (packetIn.func_148993_l() == 73)
{
var8 = new EntityPotion(this.clientWorldController, var2, var4, var6, packetIn.func_149009_m());
packetIn.func_149002_g(0);
}
else if (packetIn.func_148993_l() == 75)
{
var8 = new EntityExpBottle(this.clientWorldController, var2, var4, var6);
packetIn.func_149002_g(0);
}
else if (packetIn.func_148993_l() == 1)
var8 = new EntityBoat(this.clientWorldController, var2, var4, var6);
else if (packetIn.func_148993_l() == 50)
var8 = new EntityTNTPrimed(this.clientWorldController, var2, var4, var6, (EntityLivingBase) null);
else if (packetIn.func_148993_l() == 78)
var8 = new EntityArmorStand(this.clientWorldController, var2, var4, var6);
else if (packetIn.func_148993_l() == 51)
var8 = new EntityEnderCrystal(this.clientWorldController, var2, var4, var6);
else if (packetIn.func_148993_l() == 2)
var8 = new EntityItem(this.clientWorldController, var2, var4, var6);
else if (packetIn.func_148993_l() == 70)
{
var8 = new EntityFallingBlock(this.clientWorldController, var2, var4, var6, Block.getStateById(packetIn.func_149009_m() & 65535));
packetIn.func_149002_g(0);
}
if (var8 != null)
{
((Entity) var8).serverPosX = packetIn.func_148997_d();
((Entity) var8).serverPosY = packetIn.func_148998_e();
((Entity) var8).serverPosZ = packetIn.func_148994_f();
((Entity) var8).rotationPitch = packetIn.func_149008_j() * 360 / 256.0F;
((Entity) var8).rotationYaw = packetIn.func_149006_k() * 360 / 256.0F;
final Entity[] var12 = ((Entity) var8).getParts();
if (var12 != null)
{
final int var10 = packetIn.func_149001_c() - ((Entity) var8).getEntityId();
for (final Entity element : var12)
element.setEntityId(element.getEntityId() + var10);
}
((Entity) var8).setEntityId(packetIn.func_149001_c());
this.clientWorldController.addEntityToWorld(packetIn.func_149001_c(), (Entity) var8);
if (packetIn.func_149009_m() > 0)
{
if (packetIn.func_148993_l() == 60)
{
final Entity var13 = this.clientWorldController.getEntityByID(packetIn.func_149009_m());
if (var13 instanceof EntityLivingBase && var8 instanceof EntityArrow)
((EntityArrow) var8).shootingEntity = var13;
}
((Entity) var8).setVelocity(packetIn.func_149010_g() / 8000.0D, packetIn.func_149004_h() / 8000.0D, packetIn.func_148999_i() / 8000.0D);
}
}
}
/**
* Spawns an experience orb and sets its value (amount of XP)
*/
@Override
public void handleSpawnExperienceOrb(final S11PacketSpawnExperienceOrb packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final EntityXPOrb var2 = new EntityXPOrb(this.clientWorldController, packetIn.func_148984_d(), packetIn.func_148983_e(), packetIn.func_148982_f(), packetIn.func_148986_g());
var2.serverPosX = packetIn.func_148984_d();
var2.serverPosY = packetIn.func_148983_e();
var2.serverPosZ = packetIn.func_148982_f();
var2.rotationYaw = 0.0F;
var2.rotationPitch = 0.0F;
var2.setEntityId(packetIn.func_148985_c());
this.clientWorldController.addEntityToWorld(packetIn.func_148985_c(), var2);
}
/**
* Handles globally visible entities. Used in vanilla for lightning bolts
*/
@Override
public void handleSpawnGlobalEntity(final S2CPacketSpawnGlobalEntity packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final double var2 = packetIn.func_149051_d() / 32.0D;
final double var4 = packetIn.func_149050_e() / 32.0D;
final double var6 = packetIn.func_149049_f() / 32.0D;
EntityLightningBolt var8 = null;
if (packetIn.func_149053_g() == 1)
var8 = new EntityLightningBolt(this.clientWorldController, var2, var4, var6);
if (var8 != null)
{
var8.serverPosX = packetIn.func_149051_d();
var8.serverPosY = packetIn.func_149050_e();
var8.serverPosZ = packetIn.func_149049_f();
var8.rotationYaw = 0.0F;
var8.rotationPitch = 0.0F;
var8.setEntityId(packetIn.func_149052_c());
this.clientWorldController.addWeatherEffect(var8);
}
}
/**
* Handles the spawning of a painting object
*/
@Override
public void handleSpawnPainting(final S10PacketSpawnPainting packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final EntityPainting var2 = new EntityPainting(this.clientWorldController, packetIn.func_179837_b(), packetIn.func_179836_c(), packetIn.func_148961_h());
this.clientWorldController.addEntityToWorld(packetIn.func_148965_c(), var2);
}
/**
* Sets the velocity of the specified entity to the specified value
*/
@Override
public void handleEntityVelocity(final S12PacketEntityVelocity packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Entity var2 = this.clientWorldController.getEntityByID(packetIn.func_149412_c());
if (var2 != null)
var2.setVelocity(packetIn.func_149411_d() / 8000.0D, packetIn.func_149410_e() / 8000.0D, packetIn.func_149409_f() / 8000.0D);
}
/**
* Invoked when the server registers new proximate objects in your watchlist or when objects in your watchlist have changed -> Registers any changes locally
*/
@Override
public void handleEntityMetadata(final S1CPacketEntityMetadata packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Entity var2 = this.clientWorldController.getEntityByID(packetIn.func_149375_d());
if (var2 != null && packetIn.func_149376_c() != null)
var2.getDataWatcher().updateWatchedObjectsFromList(packetIn.func_149376_c());
}
/**
* Handles the creation of a nearby player entity, sets the position and held item
*/
@Override
public void handleSpawnPlayer(final S0CPacketSpawnPlayer packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final double var2 = packetIn.func_148942_f() / 32.0D;
final double var4 = packetIn.func_148949_g() / 32.0D;
final double var6 = packetIn.func_148946_h() / 32.0D;
final float var8 = packetIn.func_148941_i() * 360 / 256.0F;
final float var9 = packetIn.func_148945_j() * 360 / 256.0F;
final EntityOtherPlayerMP var10 = new EntityOtherPlayerMP(this.gameController.theWorld, this.func_175102_a(packetIn.func_179819_c()).func_178845_a());
var10.prevPosX = var10.lastTickPosX = var10.serverPosX = packetIn.func_148942_f();
var10.prevPosY = var10.lastTickPosY = var10.serverPosY = packetIn.func_148949_g();
var10.prevPosZ = var10.lastTickPosZ = var10.serverPosZ = packetIn.func_148946_h();
final int var11 = packetIn.func_148947_k();
if (var11 == 0)
var10.inventory.mainInventory[var10.inventory.currentItem] = null;
else
var10.inventory.mainInventory[var10.inventory.currentItem] = new ItemStack(Item.getItemById(var11), 1, 0);
var10.setPositionAndRotation(var2, var4, var6, var8, var9);
this.clientWorldController.addEntityToWorld(packetIn.func_148943_d(), var10);
final List var12 = packetIn.func_148944_c();
if (var12 != null)
var10.getDataWatcher().updateWatchedObjectsFromList(var12);
}
/**
* Updates an entity's position and rotation as specified by the packet
*/
@Override
public void handleEntityTeleport(final S18PacketEntityTeleport packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Entity var2 = this.clientWorldController.getEntityByID(packetIn.func_149451_c());
if (var2 != null)
{
var2.serverPosX = packetIn.func_149449_d();
var2.serverPosY = packetIn.func_149448_e();
var2.serverPosZ = packetIn.func_149446_f();
final double var3 = var2.serverPosX / 32.0D;
final double var5 = var2.serverPosY / 32.0D + 0.015625D;
final double var7 = var2.serverPosZ / 32.0D;
final float var9 = packetIn.func_149450_g() * 360 / 256.0F;
final float var10 = packetIn.func_149447_h() * 360 / 256.0F;
if (Math.abs(var2.posX - var3) < 0.03125D && Math.abs(var2.posY - var5) < 0.015625D && Math.abs(var2.posZ - var7) < 0.03125D)
var2.func_180426_a(var2.posX, var2.posY, var2.posZ, var9, var10, 3, true);
else
var2.func_180426_a(var3, var5, var7, var9, var10, 3, true);
var2.onGround = packetIn.func_179697_g();
}
}
/**
* Updates which hotbar slot of the player is currently selected
*/
@Override
public void handleHeldItemChange(final S09PacketHeldItemChange packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
if (packetIn.func_149385_c() >= 0 && packetIn.func_149385_c() < InventoryPlayer.getHotbarSize())
this.gameController.thePlayer.inventory.currentItem = packetIn.func_149385_c();
}
/**
* Updates the specified entity's position by the specified relative moment and absolute rotation. Note that subclassing of the packet allows for the specification of a subset of this data (e.g. only rel. position, abs. rotation or both).
*/
@Override
public void handleEntityMovement(final S14PacketEntity packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Entity var2 = packetIn.func_149065_a(this.clientWorldController);
if (var2 != null)
{
var2.serverPosX += packetIn.func_149062_c();
var2.serverPosY += packetIn.func_149061_d();
var2.serverPosZ += packetIn.func_149064_e();
final double var3 = var2.serverPosX / 32.0D;
final double var5 = var2.serverPosY / 32.0D;
final double var7 = var2.serverPosZ / 32.0D;
final float var9 = packetIn.func_149060_h() ? packetIn.func_149066_f() * 360 / 256.0F : var2.rotationYaw;
final float var10 = packetIn.func_149060_h() ? packetIn.func_149063_g() * 360 / 256.0F : var2.rotationPitch;
var2.func_180426_a(var3, var5, var7, var9, var10, 3, false);
var2.onGround = packetIn.func_179742_g();
}
}
/**
* Updates the direction in which the specified entity is looking, normally this head rotation is independent of the rotation of the entity itself
*/
@Override
public void handleEntityHeadLook(final S19PacketEntityHeadLook packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Entity var2 = packetIn.func_149381_a(this.clientWorldController);
if (var2 != null)
{
final float var3 = packetIn.func_149380_c() * 360 / 256.0F;
var2.setRotationYawHead(var3);
}
}
/**
* Locally eliminates the entities. Invoked by the server when the items are in fact destroyed, or the player is no longer registered as required to monitor them. The latter happens when distance between the player and item increases beyond a certain treshold (typically the viewing distance)
*/
@Override
public void handleDestroyEntities(final S13PacketDestroyEntities packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
for (int var2 = 0; var2 < packetIn.func_149098_c().length; ++var2)
this.clientWorldController.removeEntityFromWorld(packetIn.func_149098_c()[var2]);
}
/**
* Handles changes in player positioning and rotation such as when travelling to a new dimension, (re)spawning, mounting horses etc. Seems to immediately reply to the server with the clients post-processing perspective on the player positioning
*/
@Override
public void handlePlayerPosLook(final S08PacketPlayerPosLook packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final EntityPlayerSP var2 = this.gameController.thePlayer;
double var3 = packetIn.func_148932_c();
double var5 = packetIn.func_148928_d();
double var7 = packetIn.func_148933_e();
float var9 = packetIn.func_148931_f();
float var10 = packetIn.func_148930_g();
if (packetIn.func_179834_f().contains(S08PacketPlayerPosLook.EnumFlags.X))
var3 += var2.posX;
else
var2.motionX = 0.0D;
if (packetIn.func_179834_f().contains(S08PacketPlayerPosLook.EnumFlags.Y))
var5 += var2.posY;
else
var2.motionY = 0.0D;
if (packetIn.func_179834_f().contains(S08PacketPlayerPosLook.EnumFlags.Z))
var7 += var2.posZ;
else
var2.motionZ = 0.0D;
if (packetIn.func_179834_f().contains(S08PacketPlayerPosLook.EnumFlags.X_ROT))
var10 += var2.rotationPitch;
if (packetIn.func_179834_f().contains(S08PacketPlayerPosLook.EnumFlags.Y_ROT))
var9 += var2.rotationYaw;
var2.setPositionAndRotation(var3, var5, var7, var9, var10);
this.netManager.sendPacket(new C03PacketPlayer.C06PacketPlayerPosLook(var2.posX, var2.getEntityBoundingBox().minY, var2.posZ, var2.rotationYaw, var2.rotationPitch, false));
if (!this.doneLoadingTerrain)
{
this.gameController.thePlayer.prevPosX = this.gameController.thePlayer.posX;
this.gameController.thePlayer.prevPosY = this.gameController.thePlayer.posY;
this.gameController.thePlayer.prevPosZ = this.gameController.thePlayer.posZ;
this.doneLoadingTerrain = true;
this.gameController.displayGuiScreen((GuiScreen) null);
}
}
/**
* Received from the servers PlayerManager if between 1 and 64 blocks in a chunk are changed. If only one block requires an update, the server sends S23PacketBlockChange and if 64 or more blocks are changed, the server sends S21PacketChunkData
*/
@Override
public void handleMultiBlockChange(final S22PacketMultiBlockChange packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final S22PacketMultiBlockChange.BlockUpdateData[] var2 = packetIn.func_179844_a();
final int var3 = var2.length;
for (int var4 = 0; var4 < var3; ++var4)
{
final S22PacketMultiBlockChange.BlockUpdateData var5 = var2[var4];
this.clientWorldController.func_180503_b(var5.func_180090_a(), var5.func_180088_c());
}
}
/**
* Updates the specified chunk with the supplied data, marks it for re-rendering and lighting recalculation
*/
@Override
public void handleChunkData(final S21PacketChunkData packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
if (packetIn.func_149274_i())
{
if (packetIn.func_149276_g() == 0)
{
this.clientWorldController.doPreChunk(packetIn.func_149273_e(), packetIn.func_149271_f(), false);
return;
}
this.clientWorldController.doPreChunk(packetIn.func_149273_e(), packetIn.func_149271_f(), true);
}
this.clientWorldController.invalidateBlockReceiveRegion(packetIn.func_149273_e() << 4, 0, packetIn.func_149271_f() << 4, (packetIn.func_149273_e() << 4) + 15, 256, (packetIn.func_149271_f() << 4) + 15);
final Chunk var2 = this.clientWorldController.getChunkFromChunkCoords(packetIn.func_149273_e(), packetIn.func_149271_f());
var2.func_177439_a(packetIn.func_149272_d(), packetIn.func_149276_g(), packetIn.func_149274_i());
this.clientWorldController.markBlockRangeForRenderUpdate(packetIn.func_149273_e() << 4, 0, packetIn.func_149271_f() << 4, (packetIn.func_149273_e() << 4) + 15, 256, (packetIn.func_149271_f() << 4) + 15);
if (!packetIn.func_149274_i() || !(this.clientWorldController.provider instanceof WorldProviderSurface))
var2.resetRelightChecks();
}
/**
* Updates the block and metadata and generates a blockupdate (and notify the clients)
*/
@Override
public void handleBlockChange(final S23PacketBlockChange packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
this.clientWorldController.func_180503_b(packetIn.func_179827_b(), packetIn.func_180728_a());
}
/**
* Closes the network channel
*/
@Override
public void handleDisconnect(final S40PacketDisconnect packetIn)
{
this.netManager.closeChannel(packetIn.func_149165_c());
}
/**
* Invoked when disconnecting, the parameter is a ChatComponent describing the reason for termination
*/
@Override
public void onDisconnect(final IChatComponent reason)
{
this.gameController.loadWorld((WorldClient) null);
if (this.guiScreenServer != null)
{
if (this.guiScreenServer instanceof GuiScreenRealmsProxy)
this.gameController.displayGuiScreen((new DisconnectedRealmsScreen(((GuiScreenRealmsProxy) this.guiScreenServer).func_154321_a(), "disconnect.lost", reason)).getProxy());
else
this.gameController.displayGuiScreen(new GuiDisconnected(this.guiScreenServer, "disconnect.lost", reason));
}
else
this.gameController.displayGuiScreen(new GuiDisconnected(new GuiMultiplayer(new GuiMainMenu()), "disconnect.lost", reason));
}
public void addToSendQueue(final Packet p_147297_1_)
{
this.netManager.sendPacket(p_147297_1_);
}
@Override
public void handleCollectItem(final S0DPacketCollectItem packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Entity var2 = this.clientWorldController.getEntityByID(packetIn.func_149354_c());
Object var3 = this.clientWorldController.getEntityByID(packetIn.func_149353_d());
if (var3 == null)
var3 = this.gameController.thePlayer;
if (var2 != null)
{
if (var2 instanceof EntityXPOrb)
this.clientWorldController.playSoundAtEntity(var2, "random.orb", 0.2F, ((this.avRandomizer.nextFloat() - this.avRandomizer.nextFloat()) * 0.7F + 1.0F) * 2.0F);
else
this.clientWorldController.playSoundAtEntity(var2, "random.pop", 0.2F, ((this.avRandomizer.nextFloat() - this.avRandomizer.nextFloat()) * 0.7F + 1.0F) * 2.0F);
this.gameController.effectRenderer.addEffect(new EntityPickupFX(this.clientWorldController, var2, (Entity) var3, 0.5F));
this.clientWorldController.removeEntityFromWorld(packetIn.func_149354_c());
}
}
/**
* Prints a chatmessage in the chat GUI
*/
@Override
public void handleChat(final S02PacketChat packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
if (packetIn.func_179841_c() == 2)
this.gameController.ingameGUI.func_175188_a(packetIn.func_148915_c(), false);
else
this.gameController.ingameGUI.getChatGUI().printChatMessage(packetIn.func_148915_c());
}
/**
* Renders a specified animation: Waking up a player, a living entity swinging its currently held item, being hurt or receiving a critical hit by normal or magical means
*/
@Override
public void handleAnimation(final S0BPacketAnimation packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Entity var2 = this.clientWorldController.getEntityByID(packetIn.func_148978_c());
if (var2 != null)
if (packetIn.func_148977_d() == 0)
{
final EntityLivingBase var3 = (EntityLivingBase) var2;
var3.swingItem();
}
else if (packetIn.func_148977_d() == 1)
var2.performHurtAnimation();
else if (packetIn.func_148977_d() == 2)
{
final EntityPlayer var4 = (EntityPlayer) var2;
var4.wakeUpPlayer(false, false, false);
}
else if (packetIn.func_148977_d() == 4)
this.gameController.effectRenderer.func_178926_a(var2, EnumParticleTypes.CRIT);
else if (packetIn.func_148977_d() == 5)
this.gameController.effectRenderer.func_178926_a(var2, EnumParticleTypes.CRIT_MAGIC);
}
/**
* Retrieves the player identified by the packet, puts him to sleep if possible (and flags whether all players are asleep)
*/
@Override
public void handleUseBed(final S0APacketUseBed packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
packetIn.getPlayer(this.clientWorldController).func_180469_a(packetIn.func_179798_a());
}
/**
* Spawns the mob entity at the specified location, with the specified rotation, momentum and type. Updates the entities Datawatchers with the entity metadata specified in the packet
*/
@Override
public void handleSpawnMob(final S0FPacketSpawnMob packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final double var2 = packetIn.func_149023_f() / 32.0D;
final double var4 = packetIn.func_149034_g() / 32.0D;
final double var6 = packetIn.func_149029_h() / 32.0D;
final float var8 = packetIn.func_149028_l() * 360 / 256.0F;
final float var9 = packetIn.func_149030_m() * 360 / 256.0F;
final EntityLivingBase var10 = (EntityLivingBase) EntityList.createEntityByID(packetIn.func_149025_e(), this.gameController.theWorld);
var10.serverPosX = packetIn.func_149023_f();
var10.serverPosY = packetIn.func_149034_g();
var10.serverPosZ = packetIn.func_149029_h();
var10.rotationYawHead = packetIn.func_149032_n() * 360 / 256.0F;
final Entity[] var11 = var10.getParts();
if (var11 != null)
{
final int var12 = packetIn.func_149024_d() - var10.getEntityId();
for (final Entity element : var11)
element.setEntityId(element.getEntityId() + var12);
}
var10.setEntityId(packetIn.func_149024_d());
var10.setPositionAndRotation(var2, var4, var6, var8, var9);
var10.motionX = packetIn.func_149026_i() / 8000.0F;
var10.motionY = packetIn.func_149033_j() / 8000.0F;
var10.motionZ = packetIn.func_149031_k() / 8000.0F;
this.clientWorldController.addEntityToWorld(packetIn.func_149024_d(), var10);
final List var14 = packetIn.func_149027_c();
if (var14 != null)
var10.getDataWatcher().updateWatchedObjectsFromList(var14);
}
@Override
public void handleTimeUpdate(final S03PacketTimeUpdate packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
this.gameController.theWorld.func_82738_a(packetIn.func_149366_c());
this.gameController.theWorld.setWorldTime(packetIn.func_149365_d());
}
@Override
public void handleSpawnPosition(final S05PacketSpawnPosition packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
this.gameController.thePlayer.func_180473_a(packetIn.func_179800_a(), true);
this.gameController.theWorld.getWorldInfo().setSpawn(packetIn.func_179800_a());
}
@Override
public void handleEntityAttach(final S1BPacketEntityAttach packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
Object var2 = this.clientWorldController.getEntityByID(packetIn.func_149403_d());
final Entity var3 = this.clientWorldController.getEntityByID(packetIn.func_149402_e());
if (packetIn.func_149404_c() == 0)
{
boolean var4 = false;
if (packetIn.func_149403_d() == this.gameController.thePlayer.getEntityId())
{
var2 = this.gameController.thePlayer;
if (var3 instanceof EntityBoat)
((EntityBoat) var3).setIsBoatEmpty(false);
var4 = ((Entity) var2).ridingEntity == null && var3 != null;
}
else if (var3 instanceof EntityBoat)
((EntityBoat) var3).setIsBoatEmpty(true);
if (var2 == null)
return;
((Entity) var2).mountEntity(var3);
if (var4)
{
final GameSettings var5 = this.gameController.gameSettings;
this.gameController.ingameGUI.setRecordPlaying(I18n.format("mount.onboard", GameSettings.getKeyDisplayString(var5.keyBindSneak.getKeyCode())), false);
}
}
else if (packetIn.func_149404_c() == 1 && var2 instanceof EntityLiving)
if (var3 != null)
((EntityLiving) var2).setLeashedToEntity(var3, false);
else
((EntityLiving) var2).clearLeashed(false, false);
}
/**
* Invokes the entities' handleUpdateHealth method which is implemented in LivingBase (hurt/death), MinecartMobSpawner (spawn delay), FireworkRocket & MinecartTNT (explosion), IronGolem (throwing,...), Witch (spawn particles), Zombie (villager transformation), Animal (breeding mode particles), Horse (breeding/smoke particles), Sheep (...), Tameable (...), Villager (particles for breeding mode, angry and happy), Wolf (...)
*/
@Override
public void handleEntityStatus(final S19PacketEntityStatus packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Entity var2 = packetIn.func_149161_a(this.clientWorldController);
if (var2 != null)
if (packetIn.func_149160_c() == 21)
this.gameController.getSoundHandler().playSound(new GuardianSound((EntityGuardian) var2));
else
var2.handleHealthUpdate(packetIn.func_149160_c());
}
@Override
public void handleUpdateHealth(final S06PacketUpdateHealth packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
this.gameController.thePlayer.setPlayerSPHealth(packetIn.getHealth());
this.gameController.thePlayer.getFoodStats().setFoodLevel(packetIn.getFoodLevel());
this.gameController.thePlayer.getFoodStats().setFoodSaturationLevel(packetIn.getSaturationLevel());
}
@Override
public void handleSetExperience(final S1FPacketSetExperience packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
this.gameController.thePlayer.setXPStats(packetIn.func_149397_c(), packetIn.func_149396_d(), packetIn.func_149395_e());
}
@Override
public void handleRespawn(final S07PacketRespawn packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
if (packetIn.func_149082_c() != this.gameController.thePlayer.dimension)
{
this.doneLoadingTerrain = false;
final Scoreboard var2 = this.clientWorldController.getScoreboard();
this.clientWorldController = new WorldClient(this, new WorldSettings(0L, packetIn.func_149083_e(), false, this.gameController.theWorld.getWorldInfo().isHardcoreModeEnabled(), packetIn.func_149080_f()), packetIn.func_149082_c(), packetIn.func_149081_d(), this.gameController.mcProfiler);
this.clientWorldController.setWorldScoreboard(var2);
this.gameController.loadWorld(this.clientWorldController);
this.gameController.thePlayer.dimension = packetIn.func_149082_c();
this.gameController.displayGuiScreen(new GuiDownloadTerrain(this));
}
this.gameController.setDimensionAndSpawnPlayer(packetIn.func_149082_c());
this.gameController.playerController.setGameType(packetIn.func_149083_e());
}
/**
* Initiates a new explosion (sound, particles, drop spawn) for the affected blocks indicated by the packet.
*/
@Override
public void handleExplosion(final S27PacketExplosion packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Explosion var2 = new Explosion(this.gameController.theWorld, (Entity) null, packetIn.func_149148_f(), packetIn.func_149143_g(), packetIn.func_149145_h(), packetIn.func_149146_i(), packetIn.func_149150_j());
var2.doExplosionB(true);
this.gameController.thePlayer.motionX += packetIn.func_149149_c();
this.gameController.thePlayer.motionY += packetIn.func_149144_d();
this.gameController.thePlayer.motionZ += packetIn.func_149147_e();
}
/**
* Displays a GUI by ID. In order starting from id 0: Chest, Workbench, Furnace, Dispenser, Enchanting table, Brewing stand, Villager merchant, Beacon, Anvil, Hopper, Dropper, Horse
*/
@Override
public void handleOpenWindow(final S2DPacketOpenWindow packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final EntityPlayerSP var2 = this.gameController.thePlayer;
if ("minecraft:container".equals(packetIn.func_148902_e()))
{
var2.displayGUIChest(new InventoryBasic(packetIn.func_179840_c(), packetIn.func_148898_f()));
var2.openContainer.windowId = packetIn.func_148901_c();
}
else if ("minecraft:villager".equals(packetIn.func_148902_e()))
{
var2.displayVillagerTradeGui(new NpcMerchant(var2, packetIn.func_179840_c()));
var2.openContainer.windowId = packetIn.func_148901_c();
}
else if ("EntityHorse".equals(packetIn.func_148902_e()))
{
final Entity var3 = this.clientWorldController.getEntityByID(packetIn.func_148897_h());
if (var3 instanceof EntityHorse)
{
var2.displayGUIHorse((EntityHorse) var3, new AnimalChest(packetIn.func_179840_c(), packetIn.func_148898_f()));
var2.openContainer.windowId = packetIn.func_148901_c();
}
}
else if (!packetIn.func_148900_g())
{
var2.displayGui(new LocalBlockIntercommunication(packetIn.func_148902_e(), packetIn.func_179840_c()));
var2.openContainer.windowId = packetIn.func_148901_c();
}
else
{
final ContainerLocalMenu var4 = new ContainerLocalMenu(packetIn.func_148902_e(), packetIn.func_179840_c(), packetIn.func_148898_f());
var2.displayGUIChest(var4);
var2.openContainer.windowId = packetIn.func_148901_c();
}
}
/**
* Handles pickin up an ItemStack or dropping one in your inventory or an open (non-creative) container
*/
@Override
public void handleSetSlot(final S2FPacketSetSlot packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final EntityPlayerSP var2 = this.gameController.thePlayer;
if (packetIn.func_149175_c() == -1)
var2.inventory.setItemStack(packetIn.func_149174_e());
else
{
boolean var3 = false;
if (this.gameController.currentScreen instanceof GuiContainerCreative)
{
final GuiContainerCreative var4 = (GuiContainerCreative) this.gameController.currentScreen;
var3 = var4.func_147056_g() != CreativeTabs.tabInventory.getTabIndex();
}
if (packetIn.func_149175_c() == 0 && packetIn.func_149173_d() >= 36 && packetIn.func_149173_d() < 45)
{
final ItemStack var5 = var2.inventoryContainer.getSlot(packetIn.func_149173_d()).getStack();
if (packetIn.func_149174_e() != null && (var5 == null || var5.stackSize < packetIn.func_149174_e().stackSize))
packetIn.func_149174_e().animationsToGo = 5;
var2.inventoryContainer.putStackInSlot(packetIn.func_149173_d(), packetIn.func_149174_e());
}
else if (packetIn.func_149175_c() == var2.openContainer.windowId && (packetIn.func_149175_c() != 0 || !var3))
var2.openContainer.putStackInSlot(packetIn.func_149173_d(), packetIn.func_149174_e());
}
}
/**
* Verifies that the server and client are synchronized with respect to the inventory/container opened by the player and confirms if it is the case.
*/
@Override
public void handleConfirmTransaction(final S32PacketConfirmTransaction packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
Container var2 = null;
final EntityPlayerSP var3 = this.gameController.thePlayer;
if (packetIn.func_148889_c() == 0)
var2 = var3.inventoryContainer;
else if (packetIn.func_148889_c() == var3.openContainer.windowId)
var2 = var3.openContainer;
if (var2 != null && !packetIn.func_148888_e())
this.addToSendQueue(new C0FPacketConfirmTransaction(packetIn.func_148889_c(), packetIn.func_148890_d(), true));
}
/**
* Handles the placement of a specified ItemStack in a specified container/inventory slot
*/
@Override
public void handleWindowItems(final S30PacketWindowItems packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final EntityPlayerSP var2 = this.gameController.thePlayer;
if (packetIn.func_148911_c() == 0)
var2.inventoryContainer.putStacksInSlots(packetIn.func_148910_d());
else if (packetIn.func_148911_c() == var2.openContainer.windowId)
var2.openContainer.putStacksInSlots(packetIn.func_148910_d());
}
/**
* Creates a sign in the specified location if it didn't exist and opens the GUI to edit its text
*/
@Override
public void handleSignEditorOpen(final S36PacketSignEditorOpen packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
Object var2 = this.clientWorldController.getTileEntity(packetIn.func_179777_a());
if (!(var2 instanceof TileEntitySign))
{
var2 = new TileEntitySign();
((TileEntity) var2).setWorldObj(this.clientWorldController);
((TileEntity) var2).setPos(packetIn.func_179777_a());
}
this.gameController.thePlayer.func_175141_a((TileEntitySign) var2);
}
/**
* Updates a specified sign with the specified text lines
*/
@Override
public void handleUpdateSign(final S33PacketUpdateSign packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
boolean var2 = false;
if (this.gameController.theWorld.isBlockLoaded(packetIn.func_179704_a()))
{
final TileEntity var3 = this.gameController.theWorld.getTileEntity(packetIn.func_179704_a());
if (var3 instanceof TileEntitySign)
{
final TileEntitySign var4 = (TileEntitySign) var3;
if (var4.getIsEditable())
{
System.arraycopy(packetIn.func_180753_b(), 0, var4.signText, 0, 4);
var4.markDirty();
}
var2 = true;
}
}
if (!var2 && this.gameController.thePlayer != null)
this.gameController.thePlayer.addChatMessage(new ChatComponentText("Unable to locate sign at " + packetIn.func_179704_a().getX() + ", " + packetIn.func_179704_a().getY() + ", " + packetIn.func_179704_a().getZ()));
}
/**
* Updates the NBTTagCompound metadata of instances of the following entitytypes: Mob spawners, command blocks, beacons, skulls, flowerpot
*/
@Override
public void handleUpdateTileEntity(final S35PacketUpdateTileEntity packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
if (this.gameController.theWorld.isBlockLoaded(packetIn.func_179823_a()))
{
final TileEntity var2 = this.gameController.theWorld.getTileEntity(packetIn.func_179823_a());
final int var3 = packetIn.getTileEntityType();
if (var3 == 1 && var2 instanceof TileEntityMobSpawner || var3 == 2 && var2 instanceof TileEntityCommandBlock || var3 == 3 && var2 instanceof TileEntityBeacon || var3 == 4 && var2 instanceof TileEntitySkull || var3 == 5 && var2 instanceof TileEntityFlowerPot || var3 == 6 && var2 instanceof TileEntityBanner)
var2.readFromNBT(packetIn.getNbtCompound());
}
}
/**
* Sets the progressbar of the opened window to the specified value
*/
@Override
public void handleWindowProperty(final S31PacketWindowProperty packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final EntityPlayerSP var2 = this.gameController.thePlayer;
if (var2.openContainer != null && var2.openContainer.windowId == packetIn.func_149182_c())
var2.openContainer.updateProgressBar(packetIn.func_149181_d(), packetIn.func_149180_e());
}
@Override
public void handleEntityEquipment(final S04PacketEntityEquipment packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Entity var2 = this.clientWorldController.getEntityByID(packetIn.func_149389_d());
if (var2 != null)
var2.setCurrentItemOrArmor(packetIn.func_149388_e(), packetIn.func_149390_c());
}
/**
* Resets the ItemStack held in hand and closes the window that is opened
*/
@Override
public void handleCloseWindow(final S2EPacketCloseWindow packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
this.gameController.thePlayer.func_175159_q();
}
/**
* Triggers Block.onBlockEventReceived, which is implemented in BlockPistonBase for extension/retraction, BlockNote for setting the instrument (including audiovisual feedback) and in BlockContainer to set the number of players accessing a (Ender)Chest
*/
@Override
public void handleBlockAction(final S24PacketBlockAction packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
this.gameController.theWorld.addBlockEvent(packetIn.func_179825_a(), packetIn.getBlockType(), packetIn.getData1(), packetIn.getData2());
}
/**
* Updates all registered IWorldAccess instances with destroyBlockInWorldPartially
*/
@Override
public void handleBlockBreakAnim(final S25PacketBlockBreakAnim packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
this.gameController.theWorld.sendBlockBreakProgress(packetIn.func_148845_c(), packetIn.func_179821_b(), packetIn.func_148846_g());
}
@Override
public void handleMapChunkBulk(final S26PacketMapChunkBulk packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
for (int var2 = 0; var2 < packetIn.func_149254_d(); ++var2)
{
final int var3 = packetIn.func_149255_a(var2);
final int var4 = packetIn.func_149253_b(var2);
this.clientWorldController.doPreChunk(var3, var4, true);
this.clientWorldController.invalidateBlockReceiveRegion(var3 << 4, 0, var4 << 4, (var3 << 4) + 15, 256, (var4 << 4) + 15);
final Chunk var5 = this.clientWorldController.getChunkFromChunkCoords(var3, var4);
var5.func_177439_a(packetIn.func_149256_c(var2), packetIn.func_179754_d(var2), true);
this.clientWorldController.markBlockRangeForRenderUpdate(var3 << 4, 0, var4 << 4, (var3 << 4) + 15, 256, (var4 << 4) + 15);
if (!(this.clientWorldController.provider instanceof WorldProviderSurface))
var5.resetRelightChecks();
}
}
@Override
public void handleChangeGameState(final S2BPacketChangeGameState packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final EntityPlayerSP var2 = this.gameController.thePlayer;
final int var3 = packetIn.func_149138_c();
final float var4 = packetIn.func_149137_d();
final int var5 = MathHelper.floor_float(var4 + 0.5F);
if (var3 >= 0 && var3 < S2BPacketChangeGameState.MESSAGE_NAMES.length && S2BPacketChangeGameState.MESSAGE_NAMES[var3] != null)
var2.addChatComponentMessage(new ChatComponentTranslation(S2BPacketChangeGameState.MESSAGE_NAMES[var3]));
if (var3 == 1)
{
this.clientWorldController.getWorldInfo().setRaining(true);
this.clientWorldController.setRainStrength(0.0F);
}
else if (var3 == 2)
{
this.clientWorldController.getWorldInfo().setRaining(false);
this.clientWorldController.setRainStrength(1.0F);
}
else if (var3 == 3)
this.gameController.playerController.setGameType(WorldSettings.GameType.getByID(var5));
else if (var3 == 4)
this.gameController.displayGuiScreen(new GuiWinGame());
else if (var3 == 5)
{
final GameSettings var6 = this.gameController.gameSettings;
if (var4 == 0.0F)
this.gameController.displayGuiScreen(new GuiScreenDemo());
else if (var4 == 101.0F)
this.gameController.ingameGUI.getChatGUI().printChatMessage(new ChatComponentTranslation("demo.help.movement", GameSettings.getKeyDisplayString(var6.keyBindForward.getKeyCode()), GameSettings.getKeyDisplayString(var6.keyBindLeft.getKeyCode()), GameSettings.getKeyDisplayString(var6.keyBindBack.getKeyCode()), GameSettings.getKeyDisplayString(var6.keyBindRight.getKeyCode())));
else if (var4 == 102.0F)
this.gameController.ingameGUI.getChatGUI().printChatMessage(new ChatComponentTranslation("demo.help.jump", GameSettings.getKeyDisplayString(var6.keyBindJump.getKeyCode())));
else if (var4 == 103.0F)
this.gameController.ingameGUI.getChatGUI().printChatMessage(new ChatComponentTranslation("demo.help.inventory", GameSettings.getKeyDisplayString(var6.keyBindInventory.getKeyCode())));
}
else if (var3 == 6)
this.clientWorldController.playSound(var2.posX, var2.posY + var2.getEyeHeight(), var2.posZ, "random.successful_hit", 0.18F, 0.45F, false);
else if (var3 == 7)
this.clientWorldController.setRainStrength(var4);
else if (var3 == 8)
this.clientWorldController.setThunderStrength(var4);
else if (var3 == 10)
{
this.clientWorldController.spawnParticle(EnumParticleTypes.MOB_APPEARANCE, var2.posX, var2.posY, var2.posZ, 0.0D, 0.0D, 0.0D, new int[0]);
this.clientWorldController.playSound(var2.posX, var2.posY, var2.posZ, "mob.guardian.curse", 1.0F, 1.0F, false);
}
}
/**
* Updates the worlds MapStorage with the specified MapData for the specified map-identifier and invokes a MapItemRenderer for it
*/
@Override
public void handleMaps(final S34PacketMaps packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final MapData var2 = ItemMap.loadMapData(packetIn.getMapId(), this.gameController.theWorld);
packetIn.func_179734_a(var2);
this.gameController.entityRenderer.getMapItemRenderer().func_148246_a(var2);
}
@Override
public void handleEffect(final S28PacketEffect packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
if (packetIn.isSoundServerwide())
this.gameController.theWorld.func_175669_a(packetIn.getSoundType(), packetIn.func_179746_d(), packetIn.getSoundData());
else
this.gameController.theWorld.playAuxSFX(packetIn.getSoundType(), packetIn.func_179746_d(), packetIn.getSoundData());
}
/**
* Updates the players statistics or achievements
*/
@Override
public void handleStatistics(final S37PacketStatistics packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
boolean var2 = false;
StatBase var5;
int var6;
for (final Iterator var3 = packetIn.func_148974_c().entrySet().iterator(); var3.hasNext(); this.gameController.thePlayer.getStatFileWriter().func_150873_a(this.gameController.thePlayer, var5, var6))
{
final Entry var4 = (Entry) var3.next();
var5 = (StatBase) var4.getKey();
var6 = ((Integer) var4.getValue()).intValue();
if (var5.isAchievement() && var6 > 0)
{
if (this.field_147308_k && this.gameController.thePlayer.getStatFileWriter().writeStat(var5) == 0)
{
final Achievement var7 = (Achievement) var5;
this.gameController.guiAchievement.displayAchievement(var7);
this.gameController.getTwitchStream().func_152911_a(new MetadataAchievement(var7), 0L);
if (var5 == AchievementList.openInventory)
{
this.gameController.gameSettings.showInventoryAchievementHint = false;
this.gameController.gameSettings.saveOptions();
}
}
var2 = true;
}
}
if (!this.field_147308_k && !var2 && this.gameController.gameSettings.showInventoryAchievementHint)
this.gameController.guiAchievement.displayUnformattedAchievement(AchievementList.openInventory);
this.field_147308_k = true;
if (this.gameController.currentScreen instanceof IProgressMeter)
((IProgressMeter) this.gameController.currentScreen).doneLoading();
}
@Override
public void handleEntityEffect(final S1DPacketEntityEffect packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Entity var2 = this.clientWorldController.getEntityByID(packetIn.func_149426_d());
if (var2 instanceof EntityLivingBase)
{
final PotionEffect var3 = new PotionEffect(packetIn.func_149427_e(), packetIn.func_180755_e(), packetIn.func_149428_f(), false, packetIn.func_179707_f());
var3.setPotionDurationMax(packetIn.func_149429_c());
((EntityLivingBase) var2).addPotionEffect(var3);
}
}
@Override
public void func_175098_a(final S42PacketCombatEvent p_175098_1_)
{
PacketThreadUtil.func_180031_a(p_175098_1_, this, this.gameController);
final Entity var2 = this.clientWorldController.getEntityByID(p_175098_1_.field_179775_c);
final EntityLivingBase var3 = var2 instanceof EntityLivingBase ? (EntityLivingBase) var2 : null;
if (p_175098_1_.field_179776_a == S42PacketCombatEvent.Event.END_COMBAT)
{
final long var4 = 1000 * p_175098_1_.field_179772_d / 20;
final MetadataCombat var6 = new MetadataCombat(this.gameController.thePlayer, var3);
this.gameController.getTwitchStream().func_176026_a(var6, 0L - var4, 0L);
}
else if (p_175098_1_.field_179776_a == S42PacketCombatEvent.Event.ENTITY_DIED)
{
final Entity var7 = this.clientWorldController.getEntityByID(p_175098_1_.field_179774_b);
if (var7 instanceof EntityPlayer)
{
final MetadataPlayerDeath var5 = new MetadataPlayerDeath((EntityPlayer) var7, var3);
var5.func_152807_a(p_175098_1_.field_179773_e);
this.gameController.getTwitchStream().func_152911_a(var5, 0L);
}
}
}
@Override
public void func_175101_a(final S41PacketServerDifficulty p_175101_1_)
{
PacketThreadUtil.func_180031_a(p_175101_1_, this, this.gameController);
this.gameController.theWorld.getWorldInfo().setDifficulty(p_175101_1_.func_179831_b());
this.gameController.theWorld.getWorldInfo().setDifficultyLocked(p_175101_1_.func_179830_a());
}
@Override
public void func_175094_a(final S43PacketCamera p_175094_1_)
{
PacketThreadUtil.func_180031_a(p_175094_1_, this, this.gameController);
final Entity var2 = p_175094_1_.func_179780_a(this.clientWorldController);
if (var2 != null)
this.gameController.func_175607_a(var2);
}
@Override
public void func_175093_a(final S44PacketWorldBorder p_175093_1_)
{
PacketThreadUtil.func_180031_a(p_175093_1_, this, this.gameController);
p_175093_1_.func_179788_a(this.clientWorldController.getWorldBorder());
}
@Override
public void func_175099_a(final S45PacketTitle p_175099_1_)
{
PacketThreadUtil.func_180031_a(p_175099_1_, this, this.gameController);
final S45PacketTitle.Type var2 = p_175099_1_.func_179807_a();
String var3 = null;
String var4 = null;
final String var5 = p_175099_1_.func_179805_b() != null ? p_175099_1_.func_179805_b().getFormattedText() : "";
switch (NetHandlerPlayClient.SwitchAction.field_178885_a[var2.ordinal()])
{
case 1:
var3 = var5;
break;
case 2:
var4 = var5;
break;
case 3:
this.gameController.ingameGUI.func_175178_a("", "", -1, -1, -1);
this.gameController.ingameGUI.func_175177_a();
return;
}
this.gameController.ingameGUI.func_175178_a(var3, var4, p_175099_1_.func_179806_c(), p_175099_1_.func_179804_d(), p_175099_1_.func_179803_e());
}
@Override
public void func_175100_a(final S46PacketSetCompressionLevel p_175100_1_)
{
if (!this.netManager.isLocalChannel())
this.netManager.setCompressionTreshold(p_175100_1_.func_179760_a());
}
@Override
public void func_175096_a(final S47PacketPlayerListHeaderFooter p_175096_1_)
{
this.gameController.ingameGUI.getTabList().setHeader(p_175096_1_.func_179700_a().getFormattedText().length() == 0 ? null : p_175096_1_.func_179700_a());
this.gameController.ingameGUI.getTabList().setFooter(p_175096_1_.func_179701_b().getFormattedText().length() == 0 ? null : p_175096_1_.func_179701_b());
}
@Override
public void handleRemoveEntityEffect(final S1EPacketRemoveEntityEffect packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Entity var2 = this.clientWorldController.getEntityByID(packetIn.func_149076_c());
if (var2 instanceof EntityLivingBase)
((EntityLivingBase) var2).removePotionEffectClient(packetIn.func_149075_d());
}
@Override
public void handlePlayerListItem(final S38PacketPlayerListItem packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Iterator var2 = packetIn.func_179767_a().iterator();
while (var2.hasNext())
{
final S38PacketPlayerListItem.AddPlayerData var3 = (S38PacketPlayerListItem.AddPlayerData) var2.next();
if (packetIn.func_179768_b() == S38PacketPlayerListItem.Action.REMOVE_PLAYER)
this.playerInfoMap.remove(var3.func_179962_a().getId());
else
{
NetworkPlayerInfo var4 = (NetworkPlayerInfo) this.playerInfoMap.get(var3.func_179962_a().getId());
if (packetIn.func_179768_b() == S38PacketPlayerListItem.Action.ADD_PLAYER)
{
var4 = new NetworkPlayerInfo(var3);
this.playerInfoMap.put(var4.func_178845_a().getId(), var4);
}
if (var4 != null)
switch (NetHandlerPlayClient.SwitchAction.field_178884_b[packetIn.func_179768_b().ordinal()])
{
case 1:
var4.func_178839_a(var3.func_179960_c());
var4.func_178838_a(var3.func_179963_b());
break;
case 2:
var4.func_178839_a(var3.func_179960_c());
break;
case 3:
var4.func_178838_a(var3.func_179963_b());
break;
case 4:
var4.func_178859_a(var3.func_179961_d());
}
}
}
}
@Override
public void handleKeepAlive(final S00PacketKeepAlive packetIn)
{
this.addToSendQueue(new C00PacketKeepAlive(packetIn.func_149134_c()));
}
@Override
public void handlePlayerAbilities(final S39PacketPlayerAbilities packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final EntityPlayerSP var2 = this.gameController.thePlayer;
var2.capabilities.isFlying = packetIn.isFlying();
var2.capabilities.isCreativeMode = packetIn.isCreativeMode();
var2.capabilities.disableDamage = packetIn.isInvulnerable();
var2.capabilities.allowFlying = packetIn.isAllowFlying();
var2.capabilities.setFlySpeed(packetIn.getFlySpeed());
var2.capabilities.setPlayerWalkSpeed(packetIn.getWalkSpeed());
}
/**
* Displays the available command-completion options the server knows of
*/
@Override
public void handleTabComplete(final S3APacketTabComplete packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
if (this.gameController.currentScreen instanceof GuiChat)
{
final GuiChat guiChat = (GuiChat) this.gameController.currentScreen;
guiChat.onAutocompleteResponse(packetIn.getCompleters());
}
}
@Override
public void handleSoundEffect(final S29PacketSoundEffect packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
this.gameController.theWorld.playSound(packetIn.func_149207_d(), packetIn.func_149211_e(), packetIn.func_149210_f(), packetIn.func_149212_c(), packetIn.func_149208_g(), packetIn.func_149209_h(), false);
}
@Override
public void func_175095_a(final S48PacketResourcePackSend p_175095_1_)
{
final String var2 = p_175095_1_.func_179783_a();
final String var3 = p_175095_1_.func_179784_b();
if (var2.startsWith("level://"))
{
final String var4 = var2.substring("level://".length());
final File var5 = new File(this.gameController.mcDataDir, "saves");
final File var6 = new File(var5, var4);
if (var6.isFile())
{
this.netManager.sendPacket(new C19PacketResourcePackStatus(var3, C19PacketResourcePackStatus.Action.ACCEPTED));
Futures.addCallback(this.gameController.getResourcePackRepository().func_177319_a(var6), new FutureCallback()
{
private static final String __OBFID = "CL_00000879";
@Override
public void onSuccess(final Object p_onSuccess_1_)
{
NetHandlerPlayClient.this.netManager.sendPacket(new C19PacketResourcePackStatus(var3, C19PacketResourcePackStatus.Action.SUCCESSFULLY_LOADED));
}
@Override
public void onFailure(final Throwable p_onFailure_1_)
{
NetHandlerPlayClient.this.netManager.sendPacket(new C19PacketResourcePackStatus(var3, C19PacketResourcePackStatus.Action.FAILED_DOWNLOAD));
}
});
}
else
this.netManager.sendPacket(new C19PacketResourcePackStatus(var3, C19PacketResourcePackStatus.Action.FAILED_DOWNLOAD));
}
else if (this.gameController.getCurrentServerData() != null && this.gameController.getCurrentServerData().getResourceMode() == ServerData.ServerResourceMode.ENABLED)
{
this.netManager.sendPacket(new C19PacketResourcePackStatus(var3, C19PacketResourcePackStatus.Action.ACCEPTED));
Futures.addCallback(this.gameController.getResourcePackRepository().func_180601_a(var2, var3), new FutureCallback()
{
private static final String __OBFID = "CL_00002624";
@Override
public void onSuccess(final Object p_onSuccess_1_)
{
NetHandlerPlayClient.this.netManager.sendPacket(new C19PacketResourcePackStatus(var3, C19PacketResourcePackStatus.Action.SUCCESSFULLY_LOADED));
}
@Override
public void onFailure(final Throwable p_onFailure_1_)
{
NetHandlerPlayClient.this.netManager.sendPacket(new C19PacketResourcePackStatus(var3, C19PacketResourcePackStatus.Action.FAILED_DOWNLOAD));
}
});
}
else if (this.gameController.getCurrentServerData() != null && this.gameController.getCurrentServerData().getResourceMode() != ServerData.ServerResourceMode.PROMPT)
this.netManager.sendPacket(new C19PacketResourcePackStatus(var3, C19PacketResourcePackStatus.Action.DECLINED));
else
this.gameController.addScheduledTask(new Runnable()
{
private static final String __OBFID = "CL_00002623";
@Override
public void run()
{
NetHandlerPlayClient.this.gameController.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback()
{
private static final String __OBFID = "CL_00002622";
@Override
public void confirmClicked(final boolean result, final int id)
{
NetHandlerPlayClient.this.gameController = Minecraft.getMinecraft();
if (result)
{
if (NetHandlerPlayClient.this.gameController.getCurrentServerData() != null)
NetHandlerPlayClient.this.gameController.getCurrentServerData().setResourceMode(ServerData.ServerResourceMode.ENABLED);
NetHandlerPlayClient.this.netManager.sendPacket(new C19PacketResourcePackStatus(var3, C19PacketResourcePackStatus.Action.ACCEPTED));
Futures.addCallback(NetHandlerPlayClient.this.gameController.getResourcePackRepository().func_180601_a(var2, var3), new FutureCallback()
{
private static final String __OBFID = "CL_00002621";
@Override
public void onSuccess(final Object p_onSuccess_1_)
{
NetHandlerPlayClient.this.netManager.sendPacket(new C19PacketResourcePackStatus(var3, C19PacketResourcePackStatus.Action.SUCCESSFULLY_LOADED));
}
@Override
public void onFailure(final Throwable p_onFailure_1_)
{
NetHandlerPlayClient.this.netManager.sendPacket(new C19PacketResourcePackStatus(var3, C19PacketResourcePackStatus.Action.FAILED_DOWNLOAD));
}
});
}
else
{
if (NetHandlerPlayClient.this.gameController.getCurrentServerData() != null)
NetHandlerPlayClient.this.gameController.getCurrentServerData().setResourceMode(ServerData.ServerResourceMode.DISABLED);
NetHandlerPlayClient.this.netManager.sendPacket(new C19PacketResourcePackStatus(var3, C19PacketResourcePackStatus.Action.DECLINED));
}
ServerList.func_147414_b(NetHandlerPlayClient.this.gameController.getCurrentServerData());
NetHandlerPlayClient.this.gameController.displayGuiScreen((GuiScreen) null);
}
}, I18n.format("multiplayer.texturePrompt.line1"), I18n.format("multiplayer.texturePrompt.line2"), 0));
}
});
}
@Override
public void func_175097_a(final S49PacketUpdateEntityNBT p_175097_1_)
{
PacketThreadUtil.func_180031_a(p_175097_1_, this, this.gameController);
final Entity var2 = p_175097_1_.func_179764_a(this.clientWorldController);
if (var2 != null)
var2.func_174834_g(p_175097_1_.func_179763_a());
}
/**
* Handles packets that have room for a channel specification. Vanilla implemented channels are "MC|TrList" to acquire a MerchantRecipeList trades for a villager merchant, "MC|Brand" which sets the server brand? on the player instance and finally "MC|RPack" which the server uses to communicate the identifier of the default server resourcepack for the client to load.
*/
@Override
public void handleCustomPayload(final S3FPacketCustomPayload packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
if ("MC|TrList".equals(packetIn.getChannelName()))
{
final PacketBuffer var2 = packetIn.getBufferData();
try
{
final int var3 = var2.readInt();
final GuiScreen var4 = this.gameController.currentScreen;
if (var4 != null && var4 instanceof GuiMerchant && var3 == this.gameController.thePlayer.openContainer.windowId)
{
final IMerchant var5 = ((GuiMerchant) var4).getMerchant();
final MerchantRecipeList var6 = MerchantRecipeList.func_151390_b(var2);
var5.setRecipes(var6);
}
} catch (final IOException var10)
{
logger.error("Couldn\'t load trade info", var10);
} finally
{
var2.release();
}
}
else if ("MC|Brand".equals(packetIn.getChannelName()))
this.gameController.thePlayer.func_175158_f(packetIn.getBufferData().readStringFromBuffer(32767));
else if ("MC|BOpen".equals(packetIn.getChannelName()))
{
final ItemStack var12 = this.gameController.thePlayer.getCurrentEquippedItem();
if (var12 != null && var12.getItem() == Items.written_book)
this.gameController.displayGuiScreen(new GuiScreenBook(this.gameController.thePlayer, var12, false));
}
}
/**
* May create a scoreboard objective, remove an objective from the scoreboard or update an objectives' displayname
*/
@Override
public void handleScoreboardObjective(final S3BPacketScoreboardObjective packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Scoreboard var2 = this.clientWorldController.getScoreboard();
ScoreObjective var3;
if (packetIn.func_149338_e() == 0)
{
var3 = var2.addScoreObjective(packetIn.func_149339_c(), IScoreObjectiveCriteria.DUMMY);
var3.setDisplayName(packetIn.func_149337_d());
var3.func_178767_a(packetIn.func_179817_d());
}
else
{
var3 = var2.getObjective(packetIn.func_149339_c());
if (packetIn.func_149338_e() == 1)
var2.func_96519_k(var3);
else if (packetIn.func_149338_e() == 2)
{
var3.setDisplayName(packetIn.func_149337_d());
var3.func_178767_a(packetIn.func_179817_d());
}
}
}
/**
* Either updates the score with a specified value or removes the score for an objective
*/
@Override
public void handleUpdateScore(final S3CPacketUpdateScore packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Scoreboard var2 = this.clientWorldController.getScoreboard();
final ScoreObjective var3 = var2.getObjective(packetIn.func_149321_d());
if (packetIn.func_180751_d() == S3CPacketUpdateScore.Action.CHANGE)
{
final Score var4 = var2.getValueFromObjective(packetIn.func_149324_c(), var3);
var4.setScorePoints(packetIn.func_149323_e());
}
else if (packetIn.func_180751_d() == S3CPacketUpdateScore.Action.REMOVE)
if (StringUtils.isNullOrEmpty(packetIn.func_149321_d()))
var2.func_178822_d(packetIn.func_149324_c(), (ScoreObjective) null);
else if (var3 != null)
var2.func_178822_d(packetIn.func_149324_c(), var3);
}
/**
* Removes or sets the ScoreObjective to be displayed at a particular scoreboard position (list, sidebar, below name)
*/
@Override
public void handleDisplayScoreboard(final S3DPacketDisplayScoreboard packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Scoreboard var2 = this.clientWorldController.getScoreboard();
if (packetIn.func_149370_d().length() == 0)
var2.setObjectiveInDisplaySlot(packetIn.func_149371_c(), (ScoreObjective) null);
else
{
final ScoreObjective var3 = var2.getObjective(packetIn.func_149370_d());
var2.setObjectiveInDisplaySlot(packetIn.func_149371_c(), var3);
}
}
/**
* Updates a team managed by the scoreboard: Create/Remove the team registration, Register/Remove the player-team- memberships, Set team displayname/prefix/suffix and/or whether friendly fire is enabled
*/
@Override
public void handleTeams(final S3EPacketTeams packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Scoreboard var2 = this.clientWorldController.getScoreboard();
ScorePlayerTeam var3;
if (packetIn.func_149307_h() == 0)
var3 = var2.createTeam(packetIn.func_149312_c());
else
var3 = var2.getTeam(packetIn.func_149312_c());
if (packetIn.func_149307_h() == 0 || packetIn.func_149307_h() == 2)
{
var3.setTeamName(packetIn.func_149306_d());
var3.setNamePrefix(packetIn.func_149311_e());
var3.setNameSuffix(packetIn.func_149309_f());
var3.func_178774_a(EnumChatFormatting.func_175744_a(packetIn.func_179813_h()));
var3.func_98298_a(packetIn.func_149308_i());
final Team.EnumVisible var4 = Team.EnumVisible.func_178824_a(packetIn.func_179814_i());
if (var4 != null)
var3.func_178772_a(var4);
}
String var5;
Iterator var6;
if (packetIn.func_149307_h() == 0 || packetIn.func_149307_h() == 3)
{
var6 = packetIn.func_149310_g().iterator();
while (var6.hasNext())
{
var5 = (String) var6.next();
var2.func_151392_a(var5, packetIn.func_149312_c());
}
}
if (packetIn.func_149307_h() == 4)
{
var6 = packetIn.func_149310_g().iterator();
while (var6.hasNext())
{
var5 = (String) var6.next();
var2.removePlayerFromTeam(var5, var3);
}
}
if (packetIn.func_149307_h() == 1)
var2.removeTeam(var3);
}
/**
* Spawns a specified number of particles at the specified location with a randomized displacement according to specified bounds
*/
@Override
public void handleParticles(final S2APacketParticles packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
if (packetIn.func_149222_k() == 0)
{
final double var2 = packetIn.func_149227_j() * packetIn.func_149221_g();
final double var4 = packetIn.func_149227_j() * packetIn.func_149224_h();
final double var6 = packetIn.func_149227_j() * packetIn.func_149223_i();
try
{
this.clientWorldController.spawnParticle(packetIn.func_179749_a(), packetIn.func_179750_b(), packetIn.func_149220_d(), packetIn.func_149226_e(), packetIn.func_149225_f(), var2, var4, var6, packetIn.func_179748_k());
} catch (final Throwable var17)
{
logger.warn("Could not spawn particle effect " + packetIn.func_179749_a());
}
}
else
for (int var18 = 0; var18 < packetIn.func_149222_k(); ++var18)
{
final double var3 = this.avRandomizer.nextGaussian() * packetIn.func_149221_g();
final double var5 = this.avRandomizer.nextGaussian() * packetIn.func_149224_h();
final double var7 = this.avRandomizer.nextGaussian() * packetIn.func_149223_i();
final double var9 = this.avRandomizer.nextGaussian() * packetIn.func_149227_j();
final double var11 = this.avRandomizer.nextGaussian() * packetIn.func_149227_j();
final double var13 = this.avRandomizer.nextGaussian() * packetIn.func_149227_j();
try
{
this.clientWorldController.spawnParticle(packetIn.func_179749_a(), packetIn.func_179750_b(), packetIn.func_149220_d() + var3, packetIn.func_149226_e() + var5, packetIn.func_149225_f() + var7, var9, var11, var13, packetIn.func_179748_k());
} catch (final Throwable var16)
{
logger.warn("Could not spawn particle effect " + packetIn.func_179749_a());
return;
}
}
}
/**
* Updates en entity's attributes and their respective modifiers, which are used for speed bonusses (player sprinting, animals fleeing, baby speed), weapon/tool attackDamage, hostiles followRange randomization, zombie maxHealth and knockback resistance as well as reinforcement spawning chance.
*/
@Override
public void handleEntityProperties(final S20PacketEntityProperties packetIn)
{
PacketThreadUtil.func_180031_a(packetIn, this, this.gameController);
final Entity var2 = this.clientWorldController.getEntityByID(packetIn.func_149442_c());
if (var2 != null)
if (!(var2 instanceof EntityLivingBase))
throw new IllegalStateException("Server tried to update attributes of a non-living entity (actually: " + var2 + ")");
else
{
final BaseAttributeMap var3 = ((EntityLivingBase) var2).getAttributeMap();
final Iterator var4 = packetIn.func_149441_d().iterator();
while (var4.hasNext())
{
final S20PacketEntityProperties.Snapshot var5 = (S20PacketEntityProperties.Snapshot) var4.next();
IAttributeInstance var6 = var3.getAttributeInstanceByName(var5.func_151409_a());
if (var6 == null)
var6 = var3.registerAttribute(new RangedAttribute((IAttribute) null, var5.func_151409_a(), 0.0D, 2.2250738585072014E-308D, Double.MAX_VALUE));
var6.setBaseValue(var5.func_151410_b());
var6.removeAllModifiers();
final Iterator var7 = var5.func_151408_c().iterator();
while (var7.hasNext())
{
final AttributeModifier var8 = (AttributeModifier) var7.next();
var6.applyModifier(var8);
}
}
}
}
/**
* Returns this the NetworkManager instance registered with this NetworkHandlerPlayClient
*/
public NetworkManager getNetworkManager()
{
return this.netManager;
}
public Collection func_175106_d()
{
return this.playerInfoMap.values();
}
public NetworkPlayerInfo func_175102_a(final UUID p_175102_1_)
{
return (NetworkPlayerInfo) this.playerInfoMap.get(p_175102_1_);
}
public NetworkPlayerInfo func_175104_a(final String p_175104_1_)
{
final Iterator var2 = this.playerInfoMap.values().iterator();
NetworkPlayerInfo var3;
do
{
if (!var2.hasNext())
return null;
var3 = (NetworkPlayerInfo) var2.next();
} while (!var3.func_178845_a().getName().equals(p_175104_1_));
return var3;
}
public GameProfile func_175105_e()
{
return this.field_175107_d;
}
static final class SwitchAction
{
static final int[] field_178885_a;
static final int[] field_178884_b = new int[S38PacketPlayerListItem.Action.values().length];
private static final String __OBFID = "CL_00002620";
static
{
try
{
field_178884_b[S38PacketPlayerListItem.Action.ADD_PLAYER.ordinal()] = 1;
} catch (final NoSuchFieldError var7)
{
;
}
try
{
field_178884_b[S38PacketPlayerListItem.Action.UPDATE_GAME_MODE.ordinal()] = 2;
} catch (final NoSuchFieldError var6)
{
;
}
try
{
field_178884_b[S38PacketPlayerListItem.Action.UPDATE_LATENCY.ordinal()] = 3;
} catch (final NoSuchFieldError var5)
{
;
}
try
{
field_178884_b[S38PacketPlayerListItem.Action.UPDATE_DISPLAY_NAME.ordinal()] = 4;
} catch (final NoSuchFieldError var4)
{
;
}
field_178885_a = new int[S45PacketTitle.Type.values().length];
try
{
field_178885_a[S45PacketTitle.Type.TITLE.ordinal()] = 1;
} catch (final NoSuchFieldError var3)
{
;
}
try
{
field_178885_a[S45PacketTitle.Type.SUBTITLE.ordinal()] = 2;
} catch (final NoSuchFieldError var2)
{
;
}
try
{
field_178885_a[S45PacketTitle.Type.RESET.ordinal()] = 3;
} catch (final NoSuchFieldError var1)
{
;
}
}
}
}