aboutsummaryrefslogtreecommitdiff
path: root/src/Java/api/player/client/ClientPlayerClassVisitor.java
diff options
context:
space:
mode:
authorDraknyte1 <Draknyte1@hotmail.com>2016-12-28 16:00:53 +1000
committerDraknyte1 <Draknyte1@hotmail.com>2016-12-28 16:00:53 +1000
commitf66fb1526fa85554842db425652545448495a2a0 (patch)
treea90cf67cd0f240e73f2d3ab2aa2c4b363b14b5bf /src/Java/api/player/client/ClientPlayerClassVisitor.java
parentd41a850da5a9bcfe7dda85dba2aad08387833d04 (diff)
downloadGT5-Unofficial-f66fb1526fa85554842db425652545448495a2a0.tar.gz
GT5-Unofficial-f66fb1526fa85554842db425652545448495a2a0.tar.bz2
GT5-Unofficial-f66fb1526fa85554842db425652545448495a2a0.zip
+ Added framework based on opensource works for player movement modification.
+ Added support for the builders ring to toggle Sneak on and Sprinting off while worn. + Added PlayerAPI. % Moved COFH api files into the same package as PlayerAPI.
Diffstat (limited to 'src/Java/api/player/client/ClientPlayerClassVisitor.java')
-rw-r--r--src/Java/api/player/client/ClientPlayerClassVisitor.java5400
1 files changed, 5400 insertions, 0 deletions
diff --git a/src/Java/api/player/client/ClientPlayerClassVisitor.java b/src/Java/api/player/client/ClientPlayerClassVisitor.java
new file mode 100644
index 0000000000..34499351dd
--- /dev/null
+++ b/src/Java/api/player/client/ClientPlayerClassVisitor.java
@@ -0,0 +1,5400 @@
+// ==================================================================
+// This file is part of Player API.
+//
+// Player API is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// Player API is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License and the GNU General Public License along with Player API.
+// If not, see <http://www.gnu.org/licenses/>.
+// ==================================================================
+
+package api.player.client;
+
+import java.io.*;
+
+import org.objectweb.asm.*;
+
+public final class ClientPlayerClassVisitor extends ClassVisitor
+{
+ public static final String targetClassName = "net.minecraft.client.entity.EntityPlayerSP";
+
+ private boolean hadLocalAddExhaustion;
+ private boolean hadLocalAddMovementStat;
+ private boolean hadLocalAddStat;
+ private boolean hadLocalAttackEntityFrom;
+ private boolean hadLocalAttackTargetEntityWithCurrentItem;
+ private boolean hadLocalCanBreatheUnderwater;
+ private boolean hadLocalCanHarvestBlock;
+ private boolean hadLocalCanPlayerEdit;
+ private boolean hadLocalCanTriggerWalking;
+ private boolean hadLocalCloseScreen;
+ private boolean hadLocalDamageEntity;
+ private boolean hadLocalDisplayGUIBrewingStand;
+ private boolean hadLocalDisplayGUIChest;
+ private boolean hadLocalDisplayGUIDispenser;
+ private boolean hadLocalDisplayGUIEditSign;
+ private boolean hadLocalDisplayGUIEnchantment;
+ private boolean hadLocalDisplayGUIFurnace;
+ private boolean hadLocalDisplayGUIWorkbench;
+ private boolean hadLocalDropOneItem;
+ private boolean hadLocalDropPlayerItem;
+ private boolean hadLocalDropPlayerItemWithRandomChoice;
+ private boolean hadLocalFall;
+ private boolean hadLocalGetAIMoveSpeed;
+ private boolean hadLocalGetBedOrientationInDegrees;
+ private boolean hadLocalGetBrightness;
+ private boolean hadLocalGetBrightnessForRender;
+ private boolean hadLocalGetCurrentPlayerStrVsBlock;
+ private boolean hadLocalGetCurrentPlayerStrVsBlockForge;
+ private boolean hadLocalGetDistanceSq;
+ private boolean hadLocalGetDistanceSqToEntity;
+ private boolean hadLocalGetFOVMultiplier;
+ private boolean hadLocalGetHurtSound;
+ private boolean hadLocalGetItemIcon;
+ private boolean hadLocalGetSleepTimer;
+ private boolean hadLocalHandleLavaMovement;
+ private boolean hadLocalHandleWaterMovement;
+ private boolean hadLocalHeal;
+ private boolean hadLocalIsEntityInsideOpaqueBlock;
+ private boolean hadLocalIsInWater;
+ private boolean hadLocalIsInsideOfMaterial;
+ private boolean hadLocalIsOnLadder;
+ private boolean hadLocalIsPlayerSleeping;
+ private boolean hadLocalIsSneaking;
+ private boolean hadLocalIsSprinting;
+ private boolean hadLocalJump;
+ private boolean hadLocalKnockBack;
+ private boolean hadLocalMoveEntity;
+ private boolean hadLocalMoveEntityWithHeading;
+ private boolean hadLocalMoveFlying;
+ private boolean hadLocalOnDeath;
+ private boolean hadLocalOnLivingUpdate;
+ private boolean hadLocalOnKillEntity;
+ private boolean hadLocalOnStruckByLightning;
+ private boolean hadLocalOnUpdate;
+ private boolean hadLocalPlayStepSound;
+ private boolean hadLocalPushOutOfBlocks;
+ private boolean hadLocalRayTrace;
+ private boolean hadLocalReadEntityFromNBT;
+ private boolean hadLocalRespawnPlayer;
+ private boolean hadLocalSetDead;
+ private boolean hadLocalSetPlayerSPHealth;
+ private boolean hadLocalSetPositionAndRotation;
+ private boolean hadLocalSetSneaking;
+ private boolean hadLocalSetSprinting;
+ private boolean hadLocalSleepInBedAt;
+ private boolean hadLocalSwingItem;
+ private boolean hadLocalUpdateEntityActionState;
+ private boolean hadLocalUpdateRidden;
+ private boolean hadLocalWakeUpPlayer;
+ private boolean hadLocalWriteEntityToNBT;
+
+ public static byte[] transform(byte[] bytes, boolean isObfuscated)
+ {
+ try
+ {
+ ByteArrayInputStream in = new ByteArrayInputStream(bytes);
+ ClassReader cr = new ClassReader(in);
+ ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
+ ClientPlayerClassVisitor p = new ClientPlayerClassVisitor(cw, isObfuscated);
+
+ cr.accept(p, 0);
+
+ byte[] result = cw.toByteArray();
+ in.close();
+ return result;
+ }
+ catch(IOException ioe)
+ {
+ throw new RuntimeException(ioe);
+ }
+ }
+
+ private final boolean isObfuscated;
+
+ public ClientPlayerClassVisitor(ClassVisitor classVisitor, boolean isObfuscated)
+ {
+ super(262144, classVisitor);
+ this.isObfuscated = isObfuscated;
+ }
+
+ public void visit(int version, int access, String name, String signature, String superName, String[] interfaces)
+ {
+ String[] newInterfaces = new String[interfaces.length + 1];
+ for(int i=0; i<interfaces.length; i++)
+ newInterfaces[i] = interfaces[i];
+ newInterfaces[interfaces.length] = "api/player/client/IClientPlayerAPI";
+ super.visit(version, access, name, signature, superName, newInterfaces);
+ }
+
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)
+ {
+ if(name.equals("<init>"))
+ return new ClientPlayerConstructorVisitor(super.visitMethod(access, name, desc, signature, exceptions), isObfuscated);
+
+ if(name.equals(isObfuscated ? "a" : "addExhaustion") && desc.equals("(F)V"))
+ {
+ hadLocalAddExhaustion = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localAddExhaustion", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "k" : "addMovementStat") && desc.equals("(DDD)V"))
+ {
+ hadLocalAddMovementStat = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localAddMovementStat", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "addStat") && desc.equals(isObfuscated ? "(Lph;I)V" : "(Lnet/minecraft/stats/StatBase;I)V"))
+ {
+ hadLocalAddStat = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localAddStat", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "attackEntityFrom") && desc.equals(isObfuscated ? "(Lro;F)Z" : "(Lnet/minecraft/util/DamageSource;F)Z"))
+ {
+ hadLocalAttackEntityFrom = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localAttackEntityFrom", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "r" : "attackEntityPlayerSPEntityWithCurrentItem") && desc.equals(isObfuscated ? "(Lsa;)V" : "(Lnet/minecraft/entity/Entity;)V"))
+ {
+ hadLocalAttackTargetEntityWithCurrentItem = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localAttackTargetEntityWithCurrentItem", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "aE" : "canBreatheUnderwater") && desc.equals("()Z"))
+ {
+ hadLocalCanBreatheUnderwater = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localCanBreatheUnderwater", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "canHarvestBlock") && desc.equals(isObfuscated ? "(Laji;)Z" : "(Lnet/minecraft/block/Block;)Z"))
+ {
+ hadLocalCanHarvestBlock = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localCanHarvestBlock", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "canPlayerEdit") && desc.equals(isObfuscated ? "(IIIILadd;)Z" : "(IIIILnet/minecraft/item/ItemStack;)Z"))
+ {
+ hadLocalCanPlayerEdit = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localCanPlayerEdit", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "g_" : "canTriggerWalking") && desc.equals("()Z"))
+ {
+ hadLocalCanTriggerWalking = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localCanTriggerWalking", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "k" : "closeScreen") && desc.equals("()V"))
+ {
+ hadLocalCloseScreen = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localCloseScreen", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "d" : "damageEntity") && desc.equals(isObfuscated ? "(Lro;F)V" : "(Lnet/minecraft/util/DamageSource;F)V"))
+ {
+ hadLocalDamageEntity = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localDamageEntity", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "func_146098_a") && desc.equals(isObfuscated ? "(Laov;)V" : "(Lnet/minecraft/tileentity/TileEntityBrewingStand;)V"))
+ {
+ hadLocalDisplayGUIBrewingStand = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localDisplayGUIBrewingStand", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "displayGUIChest") && desc.equals(isObfuscated ? "(Lrb;)V" : "(Lnet/minecraft/inventory/IInventory;)V"))
+ {
+ hadLocalDisplayGUIChest = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localDisplayGUIChest", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "func_146102_a") && desc.equals(isObfuscated ? "(Lapb;)V" : "(Lnet/minecraft/tileentity/TileEntityDispenser;)V"))
+ {
+ hadLocalDisplayGUIDispenser = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localDisplayGUIDispenser", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "func_146100_a") && desc.equals(isObfuscated ? "(Laor;)V" : "(Lnet/minecraft/tileentity/TileEntity;)V"))
+ {
+ hadLocalDisplayGUIEditSign = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localDisplayGUIEditSign", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "displayGUIEnchantment") && desc.equals("(IIILjava/lang/String;)V"))
+ {
+ hadLocalDisplayGUIEnchantment = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localDisplayGUIEnchantment", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "func_146101_a") && desc.equals(isObfuscated ? "(Lapg;)V" : "(Lnet/minecraft/tileentity/TileEntityFurnace;)V"))
+ {
+ hadLocalDisplayGUIFurnace = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localDisplayGUIFurnace", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "b" : "displayGUIWorkbench") && desc.equals("(III)V"))
+ {
+ hadLocalDisplayGUIWorkbench = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localDisplayGUIWorkbench", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "dropOneItem") && desc.equals(isObfuscated ? "(Z)Lxk;" : "(Z)Lnet/minecraft/entity/item/EntityItem;"))
+ {
+ hadLocalDropOneItem = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localDropOneItem", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "dropPlayerItemWithRandomChoice") && desc.equals(isObfuscated ? "(Ladd;Z)Lxk;" : "(Lnet/minecraft/item/ItemStack;Z)Lnet/minecraft/entity/item/EntityItem;"))
+ {
+ hadLocalDropPlayerItem = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localDropPlayerItem", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "func_146097_a") && desc.equals(isObfuscated ? "(Ladd;ZZ)Lxk;" : "(Lnet/minecraft/item/ItemStack;ZZ)Lnet/minecraft/entity/item/EntityItem;"))
+ {
+ hadLocalDropPlayerItemWithRandomChoice = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localDropPlayerItemWithRandomChoice", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "b" : "fall") && desc.equals("(F)V"))
+ {
+ hadLocalFall = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localFall", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "bl" : "getAIMoveSpeed") && desc.equals("()F"))
+ {
+ hadLocalGetAIMoveSpeed = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localGetAIMoveSpeed", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "bK" : "getBedOrientationInDegrees") && desc.equals("()F"))
+ {
+ hadLocalGetBedOrientationInDegrees = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localGetBedOrientationInDegrees", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "d" : "getBrightness") && desc.equals("(F)F"))
+ {
+ hadLocalGetBrightness = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localGetBrightness", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "c" : "getBrightnessForRender") && desc.equals("(F)I"))
+ {
+ hadLocalGetBrightnessForRender = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localGetBrightnessForRender", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "getCurrentPlayerStrVsBlock") && desc.equals(isObfuscated ? "(Laji;Z)F" : "(Lnet/minecraft/block/Block;Z)F"))
+ {
+ hadLocalGetCurrentPlayerStrVsBlock = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localGetCurrentPlayerStrVsBlock", desc, signature, exceptions);
+ }
+
+ if(name.equals("getBreakSpeed") && desc.equals(isObfuscated ? "(Laji;ZI)F" : "(Lnet/minecraft/block/Block;ZI)F"))
+ {
+ hadLocalGetCurrentPlayerStrVsBlockForge = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localGetCurrentPlayerStrVsBlockForge", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "e" : "getDistanceSq") && desc.equals("(DDD)D"))
+ {
+ hadLocalGetDistanceSq = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localGetDistanceSq", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "f" : "getDistanceSqToEntity") && desc.equals(isObfuscated ? "(Lsa;)D" : "(Lnet/minecraft/entity/Entity;)D"))
+ {
+ hadLocalGetDistanceSqToEntity = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localGetDistanceSqToEntity", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "t" : "getFOVMultiplier") && desc.equals("()F"))
+ {
+ hadLocalGetFOVMultiplier = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localGetFOVMultiplier", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "aT" : "getHurtSound") && desc.equals("()Ljava/lang/String;"))
+ {
+ hadLocalGetHurtSound = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localGetHurtSound", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "b" : "getItemIcon") && desc.equals(isObfuscated ? "(Ladd;I)Lrf;" : "(Lnet/minecraft/item/ItemStack;I)Lnet/minecraft/util/IIcon;"))
+ {
+ hadLocalGetItemIcon = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localGetItemIcon", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "bM" : "getSleepTimer") && desc.equals("()I"))
+ {
+ hadLocalGetSleepTimer = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localGetSleepTimer", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "P" : "handleLavaMovement") && desc.equals("()Z"))
+ {
+ hadLocalHandleLavaMovement = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localHandleLavaMovement", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "N" : "handleWaterMovement") && desc.equals("()Z"))
+ {
+ hadLocalHandleWaterMovement = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localHandleWaterMovement", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "f" : "heal") && desc.equals("(F)V"))
+ {
+ hadLocalHeal = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localHeal", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "aa" : "isEntityInsideOpaqueBlock") && desc.equals("()Z"))
+ {
+ hadLocalIsEntityInsideOpaqueBlock = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localIsEntityInsideOpaqueBlock", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "M" : "isInWater") && desc.equals("()Z"))
+ {
+ hadLocalIsInWater = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localIsInWater", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "isInsideOfMaterial") && desc.equals(isObfuscated ? "(Lawt;)Z" : "(Lnet/minecraft/block/material/Material;)Z"))
+ {
+ hadLocalIsInsideOfMaterial = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localIsInsideOfMaterial", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "h_" : "isOnLadder") && desc.equals("()Z"))
+ {
+ hadLocalIsOnLadder = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localIsOnLadder", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "bm" : "isPlayerSleeping") && desc.equals("()Z"))
+ {
+ hadLocalIsPlayerSleeping = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localIsPlayerSleeping", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "an" : "isSneaking") && desc.equals("()Z"))
+ {
+ hadLocalIsSneaking = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localIsSneaking", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "ao" : "isSprinting") && desc.equals("()Z"))
+ {
+ hadLocalIsSprinting = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localIsSprinting", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "bj" : "jump") && desc.equals("()V"))
+ {
+ hadLocalJump = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localJump", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "knockBack") && desc.equals(isObfuscated ? "(Lsa;FDD)V" : "(Lnet/minecraft/entity/Entity;FDD)V"))
+ {
+ hadLocalKnockBack = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localKnockBack", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "d" : "moveEntity") && desc.equals("(DDD)V"))
+ {
+ hadLocalMoveEntity = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localMoveEntity", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "e" : "moveEntityWithHeading") && desc.equals("(FF)V"))
+ {
+ hadLocalMoveEntityWithHeading = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localMoveEntityWithHeading", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "moveFlying") && desc.equals("(FFF)V"))
+ {
+ hadLocalMoveFlying = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localMoveFlying", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "onDeath") && desc.equals(isObfuscated ? "(Lro;)V" : "(Lnet/minecraft/util/DamageSource;)V"))
+ {
+ hadLocalOnDeath = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localOnDeath", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "e" : "onLivingUpdate") && desc.equals("()V"))
+ {
+ hadLocalOnLivingUpdate = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localOnLivingUpdate", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "onKillEntity") && desc.equals(isObfuscated ? "(Lsv;)V" : "(Lnet/minecraft/entity/EntityLivingBase;)V"))
+ {
+ hadLocalOnKillEntity = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localOnKillEntity", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "onStruckByLightning") && desc.equals(isObfuscated ? "(Lxh;)V" : "(Lnet/minecraft/entity/effect/EntityLightningBolt;)V"))
+ {
+ hadLocalOnStruckByLightning = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localOnStruckByLightning", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "h" : "onUpdate") && desc.equals("()V"))
+ {
+ hadLocalOnUpdate = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localOnUpdate", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "func_145780_a") && desc.equals(isObfuscated ? "(IIILaji;)V" : "(IIILnet/minecraft/block/Block;)V"))
+ {
+ hadLocalPlayStepSound = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localPlayStepSound", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "j" : "func_145771_j") && desc.equals("(DDD)Z"))
+ {
+ hadLocalPushOutOfBlocks = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localPushOutOfBlocks", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "rayTrace") && desc.equals(isObfuscated ? "(DF)Lazu;" : "(DF)Lnet/minecraft/util/MovingObjectPosition;"))
+ {
+ hadLocalRayTrace = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localRayTrace", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "readEntityFromNBT") && desc.equals(isObfuscated ? "(Ldh;)V" : "(Lnet/minecraft/nbt/NBTTagCompound;)V"))
+ {
+ hadLocalReadEntityFromNBT = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localReadEntityFromNBT", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "bH" : "respawnPlayer") && desc.equals("()V"))
+ {
+ hadLocalRespawnPlayer = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localRespawnPlayer", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "B" : "setDead") && desc.equals("()V"))
+ {
+ hadLocalSetDead = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localSetDead", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "n" : "setPlayerSPHealth") && desc.equals("(F)V"))
+ {
+ hadLocalSetPlayerSPHealth = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localSetPlayerSPHealth", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "setPositionAndRotation") && desc.equals("(DDDFF)V"))
+ {
+ hadLocalSetPositionAndRotation = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localSetPositionAndRotation", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "b" : "setSneaking") && desc.equals("(Z)V"))
+ {
+ hadLocalSetSneaking = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localSetSneaking", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "c" : "setSprinting") && desc.equals("(Z)V"))
+ {
+ hadLocalSetSprinting = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localSetSprinting", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "sleepInBedAt") && desc.equals(isObfuscated ? "(III)Lza;" : "(III)Lnet/minecraft/entity/player/EntityPlayer$EnumStatus;"))
+ {
+ hadLocalSleepInBedAt = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localSleepInBedAt", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "ba" : "swingItem") && desc.equals("()V"))
+ {
+ hadLocalSwingItem = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localSwingItem", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "bq" : "updateEntityActionState") && desc.equals("()V"))
+ {
+ hadLocalUpdateEntityActionState = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localUpdateEntityActionState", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "ab" : "updateRidden") && desc.equals("()V"))
+ {
+ hadLocalUpdateRidden = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localUpdateRidden", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "a" : "wakeUpPlayer") && desc.equals("(ZZZ)V"))
+ {
+ hadLocalWakeUpPlayer = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localWakeUpPlayer", desc, signature, exceptions);
+ }
+
+ if(name.equals(isObfuscated ? "b" : "writeEntityToNBT") && desc.equals(isObfuscated ? "(Ldh;)V" : "(Lnet/minecraft/nbt/NBTTagCompound;)V"))
+ {
+ hadLocalWriteEntityToNBT = true;
+ return super.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localWriteEntityToNBT", desc, signature, exceptions);
+ }
+
+ return super.visitMethod(access, name, desc, signature, exceptions);
+ }
+
+ public void visitEnd()
+ {
+ MethodVisitor mv;
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC, isObfuscated ? "a" : "addExhaustion", "(F)V", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.FLOAD, 1);
+ mv.visitMethodInsn(Opcodes.INVOKESTATIC, "api/player/client/ClientPlayerAPI", "addExhaustion", "(Lapi/player/client/IClientPlayerAPI;F)V");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "realAddExhaustion", "(F)V", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.FLOAD, 1);
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, isObfuscated ? "blk" : "net/minecraft/client/entity/EntityPlayerSP", isObfuscated ? "a" : "addExhaustion", "(F)V");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "superAddExhaustion", "(F)V", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.FLOAD, 1);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, isObfuscated ? "blg" : "net/minecraft/client/entity/AbstractClientPlayer", isObfuscated ? "a" : "addExhaustion", "(F)V");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ if(!hadLocalAddExhaustion)
+ {
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localAddExhaustion", "(F)V", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.FLOAD, 1);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, isObfuscated ? "blg" : "net/minecraft/client/entity/AbstractClientPlayer", isObfuscated ? "a" : "addExhaustion", "(F)V");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+ }
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC, isObfuscated ? "k" : "addMovementStat", "(DDD)V", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.DLOAD, 1);
+ mv.visitVarInsn(Opcodes.DLOAD, 3);
+ mv.visitVarInsn(Opcodes.DLOAD, 5);
+ mv.visitMethodInsn(Opcodes.INVOKESTATIC, "api/player/client/ClientPlayerAPI", "addMovementStat", "(Lapi/player/client/IClientPlayerAPI;DDD)V");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "realAddMovementStat", "(DDD)V", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.DLOAD, 1);
+ mv.visitVarInsn(Opcodes.DLOAD, 3);
+ mv.visitVarInsn(Opcodes.DLOAD, 5);
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, isObfuscated ? "blk" : "net/minecraft/client/entity/EntityPlayerSP", isObfuscated ? "k" : "addMovementStat", "(DDD)V");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "superAddMovementStat", "(DDD)V", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.DLOAD, 1);
+ mv.visitVarInsn(Opcodes.DLOAD, 3);
+ mv.visitVarInsn(Opcodes.DLOAD, 5);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, isObfuscated ? "blg" : "net/minecraft/client/entity/AbstractClientPlayer", isObfuscated ? "k" : "addMovementStat", "(DDD)V");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ if(!hadLocalAddMovementStat)
+ {
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localAddMovementStat", "(DDD)V", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.DLOAD, 1);
+ mv.visitVarInsn(Opcodes.DLOAD, 3);
+ mv.visitVarInsn(Opcodes.DLOAD, 5);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, isObfuscated ? "blg" : "net/minecraft/client/entity/AbstractClientPlayer", isObfuscated ? "k" : "addMovementStat", "(DDD)V");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+ }
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC, isObfuscated ? "a" : "addStat", "" + (isObfuscated ? "(Lph;I)V" : "(Lnet/minecraft/stats/StatBase;I)V") + "", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.ALOAD, 1);
+ mv.visitVarInsn(Opcodes.ILOAD, 2);
+ mv.visitMethodInsn(Opcodes.INVOKESTATIC, "api/player/client/ClientPlayerAPI", "addStat", "(Lapi/player/client/IClientPlayerAPI;" + (isObfuscated ? "Lph;I" : "Lnet/minecraft/stats/StatBase;I") + ")V");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "realAddStat", "" + (isObfuscated ? "(Lph;I)V" : "(Lnet/minecraft/stats/StatBase;I)V") + "", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.ALOAD, 1);
+ mv.visitVarInsn(Opcodes.ILOAD, 2);
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, isObfuscated ? "blk" : "net/minecraft/client/entity/EntityPlayerSP", isObfuscated ? "a" : "addStat", "" + (isObfuscated ? "(Lph;I)V" : "(Lnet/minecraft/stats/StatBase;I)V") + "");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "superAddStat", "" + (isObfuscated ? "(Lph;I)V" : "(Lnet/minecraft/stats/StatBase;I)V") + "", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.ALOAD, 1);
+ mv.visitVarInsn(Opcodes.ILOAD, 2);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, isObfuscated ? "blg" : "net/minecraft/client/entity/AbstractClientPlayer", isObfuscated ? "a" : "addStat", "" + (isObfuscated ? "(Lph;I)V" : "(Lnet/minecraft/stats/StatBase;I)V") + "");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ if(!hadLocalAddStat)
+ {
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localAddStat", "" + (isObfuscated ? "(Lph;I)V" : "(Lnet/minecraft/stats/StatBase;I)V") + "", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.ALOAD, 1);
+ mv.visitVarInsn(Opcodes.ILOAD, 2);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, isObfuscated ? "blg" : "net/minecraft/client/entity/AbstractClientPlayer", isObfuscated ? "a" : "addStat", "" + (isObfuscated ? "(Lph;I)V" : "(Lnet/minecraft/stats/StatBase;I)V") + "");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+ }
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC, isObfuscated ? "a" : "attackEntityFrom", "" + (isObfuscated ? "(Lro;F)Z" : "(Lnet/minecraft/util/DamageSource;F)Z") + "", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.ALOAD, 1);
+ mv.visitVarInsn(Opcodes.FLOAD, 2);
+ mv.visitMethodInsn(Opcodes.INVOKESTATIC, "api/player/client/ClientPlayerAPI", "attackEntityFrom", "(Lapi/player/client/IClientPlayerAPI;" + (isObfuscated ? "Lro;F" : "Lnet/minecraft/util/DamageSource;F") + ")Z");
+ mv.visitInsn(Opcodes.IRETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "realAttackEntityFrom", "" + (isObfuscated ? "(Lro;F)Z" : "(Lnet/minecraft/util/DamageSource;F)Z") + "", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.ALOAD, 1);
+ mv.visitVarInsn(Opcodes.FLOAD, 2);
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, isObfuscated ? "blk" : "net/minecraft/client/entity/EntityPlayerSP", isObfuscated ? "a" : "attackEntityFrom", "" + (isObfuscated ? "(Lro;F)Z" : "(Lnet/minecraft/util/DamageSource;F)Z") + "");
+ mv.visitInsn(Opcodes.IRETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "superAttackEntityFrom", "" + (isObfuscated ? "(Lro;F)Z" : "(Lnet/minecraft/util/DamageSource;F)Z") + "", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.ALOAD, 1);
+ mv.visitVarInsn(Opcodes.FLOAD, 2);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, isObfuscated ? "blg" : "net/minecraft/client/entity/AbstractClientPlayer", isObfuscated ? "a" : "attackEntityFrom", "" + (isObfuscated ? "(Lro;F)Z" : "(Lnet/minecraft/util/DamageSource;F)Z") + "");
+ mv.visitInsn(Opcodes.IRETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ if(!hadLocalAttackEntityFrom)
+ {
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localAttackEntityFrom", "" + (isObfuscated ? "(Lro;F)Z" : "(Lnet/minecraft/util/DamageSource;F)Z") + "", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.ALOAD, 1);
+ mv.visitVarInsn(Opcodes.FLOAD, 2);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, isObfuscated ? "blg" : "net/minecraft/client/entity/AbstractClientPlayer", isObfuscated ? "a" : "attackEntityFrom", "" + (isObfuscated ? "(Lro;F)Z" : "(Lnet/minecraft/util/DamageSource;F)Z") + "");
+ mv.visitInsn(Opcodes.IRETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+ }
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC, isObfuscated ? "r" : "attackEntityPlayerSPEntityWithCurrentItem", "" + (isObfuscated ? "(Lsa;)V" : "(Lnet/minecraft/entity/Entity;)V") + "", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.ALOAD, 1);
+ mv.visitMethodInsn(Opcodes.INVOKESTATIC, "api/player/client/ClientPlayerAPI", "attackTargetEntityWithCurrentItem", "(Lapi/player/client/IClientPlayerAPI;" + (isObfuscated ? "Lsa;" : "Lnet/minecraft/entity/Entity;") + ")V");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "realAttackTargetEntityWithCurrentItem", "" + (isObfuscated ? "(Lsa;)V" : "(Lnet/minecraft/entity/Entity;)V") + "", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.ALOAD, 1);
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, isObfuscated ? "blk" : "net/minecraft/client/entity/EntityPlayerSP", isObfuscated ? "r" : "attackEntityPlayerSPEntityWithCurrentItem", "" + (isObfuscated ? "(Lsa;)V" : "(Lnet/minecraft/entity/Entity;)V") + "");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "superAttackTargetEntityWithCurrentItem", "" + (isObfuscated ? "(Lsa;)V" : "(Lnet/minecraft/entity/Entity;)V") + "", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.ALOAD, 1);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, isObfuscated ? "blg" : "net/minecraft/client/entity/AbstractClientPlayer", isObfuscated ? "r" : "attackEntityPlayerSPEntityWithCurrentItem", "" + (isObfuscated ? "(Lsa;)V" : "(Lnet/minecraft/entity/Entity;)V") + "");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ if(!hadLocalAttackTargetEntityWithCurrentItem)
+ {
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localAttackTargetEntityWithCurrentItem", "" + (isObfuscated ? "(Lsa;)V" : "(Lnet/minecraft/entity/Entity;)V") + "", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.ALOAD, 1);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, isObfuscated ? "blg" : "net/minecraft/client/entity/AbstractClientPlayer", isObfuscated ? "r" : "attackEntityPlayerSPEntityWithCurrentItem", "" + (isObfuscated ? "(Lsa;)V" : "(Lnet/minecraft/entity/Entity;)V") + "");
+ mv.visitInsn(Opcodes.RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+ }
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC, isObfuscated ? "aE" : "canBreatheUnderwater", "()Z", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitMethodInsn(Opcodes.INVOKESTATIC, "api/player/client/ClientPlayerAPI", "canBreatheUnderwater", "(Lapi/player/client/IClientPlayerAPI;)Z");
+ mv.visitInsn(Opcodes.IRETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "realCanBreatheUnderwater", "()Z", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, isObfuscated ? "blk" : "net/minecraft/client/entity/EntityPlayerSP", isObfuscated ? "aE" : "canBreatheUnderwater", "()Z");
+ mv.visitInsn(Opcodes.IRETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "superCanBreatheUnderwater", "()Z", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, isObfuscated ? "blg" : "net/minecraft/client/entity/AbstractClientPlayer", isObfuscated ? "aE" : "canBreatheUnderwater", "()Z");
+ mv.visitInsn(Opcodes.IRETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+
+ if(!hadLocalCanBreatheUnderwater)
+ {
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "localCanBreatheUnderwater", "()Z", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, isObfuscated ? "blg" : "net/minecraft/client/entity/AbstractClientPlayer", isObfuscated ? "aE" : "canBreatheUnderwater", "()Z");
+ mv.visitInsn(Opcodes.IRETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+ }
+
+ mv = cv.visitMethod(Opcodes.ACC_PUBLIC, isObfuscated ? "a" : "canHarvestBlock", "" + (isObfuscated ? "(Laji;)Z" : "(Lnet/minecraft/block/Block;)Z") + "", null, null);
+ mv.visitVarInsn(Opcodes.ALOAD, 0);
+ mv.visitVarInsn(Opcodes.ALOAD, 1);
+ mv.visitMethodInsn(Opcodes.INVOKESTATIC, "api/player/client/ClientPlayerAPI", "canHarvestBlock", "(Lapi/player/client/IClientPlayerAPI;" + (isObfuscated ? "Laji;" : "Lnet/minecraft/block/Block;") + ")Z");
+ mv.visitInsn(Opcodes.IRETURN);
+ mv.visitMaxs(0, 0);