diff options
Diffstat (limited to 'src/main/java/ftbsc/bscv/patches/LiquidPushPatch.java')
-rw-r--r-- | src/main/java/ftbsc/bscv/patches/LiquidPushPatch.java | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/src/main/java/ftbsc/bscv/patches/LiquidPushPatch.java b/src/main/java/ftbsc/bscv/patches/LiquidPushPatch.java index a800878..e883533 100644 --- a/src/main/java/ftbsc/bscv/patches/LiquidPushPatch.java +++ b/src/main/java/ftbsc/bscv/patches/LiquidPushPatch.java @@ -5,7 +5,7 @@ import ftbsc.lll.processor.annotations.Find; import ftbsc.lll.processor.annotations.Injector; import ftbsc.lll.processor.annotations.Patch; import ftbsc.lll.processor.annotations.Target; -import ftbsc.lll.proxies.MethodProxy; +import ftbsc.lll.proxies.impl.MethodProxy; import ftbsc.lll.tools.InsnSequence; import ftbsc.lll.tools.nodes.MethodProxyInsnNode; import net.minecraft.entity.player.PlayerEntity; @@ -21,27 +21,28 @@ public class LiquidPushPatch implements ICommons { @Cancelable public static class PlayerLiquidPushEvent extends Event {} - public static boolean shouldCancelLiquidCollisions(PlayerEntity player) { - if (player.equals(MC.player)) { - return MinecraftForge.EVENT_BUS.post(new PlayerLiquidPushEvent()); - } - return false; - } - - @Patch(value = PlayerEntity.class, reason = "add hook to cancel liquid collisions") + @Patch(PlayerEntity.class) public abstract static class LiquidCollisionsOverride implements Opcodes { - @Find(parent = LiquidPushPatch.class) - abstract MethodProxy shouldCancelLiquidCollisions(); + @Find(LiquidCollisionsOverride.class) + MethodProxy shouldCancelLiquidCollisions; + + @Target(of = "shouldCancelLiquidCollisions") + public static boolean shouldCancelLiquidCollisions(PlayerEntity player) { + if (player.equals(MC.player)) { + return MinecraftForge.EVENT_BUS.post(new PlayerLiquidPushEvent()); + } + return false; + } - @Target + @Target(of = "injectLiquidCollisionHook") abstract boolean isPushedByFluid(); - @Injector - public void inject(ClassNode clazz, MethodNode main) { + @Injector(reason = "add hook to cancel liquid collisions") + public void injectLiquidCollisionHook(ClassNode clazz, MethodNode main) { LabelNode skip = new LabelNode(); InsnSequence is = new InsnSequence(); is.add(new VarInsnNode(ALOAD, 0)); - is.add(new MethodProxyInsnNode(INVOKESTATIC, shouldCancelLiquidCollisions())); + is.add(new MethodProxyInsnNode(INVOKESTATIC, shouldCancelLiquidCollisions)); is.add(new JumpInsnNode(IFEQ, skip)); is.add(new InsnNode(ICONST_0)); is.add(new InsnNode(IRETURN)); |