diff options
| author | Draknyte1 <Draknyte1@hotmail.com> | 2016-12-28 16:00:53 +1000 |
|---|---|---|
| committer | Draknyte1 <Draknyte1@hotmail.com> | 2016-12-28 16:00:53 +1000 |
| commit | f66fb1526fa85554842db425652545448495a2a0 (patch) | |
| tree | a90cf67cd0f240e73f2d3ab2aa2c4b363b14b5bf /src/Java/api/player/client/ClientPlayerClassVisitor.java | |
| parent | d41a850da5a9bcfe7dda85dba2aad08387833d04 (diff) | |
| download | GT5-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.java | 5400 |
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); |
