From 5373a5e35aec033979da113e0fe741d4129726ea Mon Sep 17 00:00:00 2001 From: WakelessSloth56 Date: Wed, 28 Sep 2022 22:09:52 +0800 Subject: [PATCH] refactor(next): remove FishingRodCastEvent, ItemHurtEvent --- .../arnicalib/game/event/FoodDataEvent.java | 2 +- .../game/event/ServerPlayerEvent.java | 2 +- .../server/event/AHServerEventFactory.java | 20 -- .../event/impl/FishingRodCastEvent.java | 56 ------ .../server/event/impl/ItemHurtEvent.java | 39 ---- src/main/resources/META-INF/coremods.json | 4 - .../resources/coremods/fishing_rod_item.js | 185 ------------------ src/main/resources/coremods/item_stack.js | 113 ----------- 8 files changed, 2 insertions(+), 419 deletions(-) delete mode 100644 src/main/java/org/auioc/mcmod/arnicalib/server/event/impl/FishingRodCastEvent.java delete mode 100644 src/main/java/org/auioc/mcmod/arnicalib/server/event/impl/ItemHurtEvent.java delete mode 100644 src/main/resources/META-INF/coremods.json delete mode 100644 src/main/resources/coremods/fishing_rod_item.js delete mode 100644 src/main/resources/coremods/item_stack.js diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/event/FoodDataEvent.java b/src/main/java/org/auioc/mcmod/arnicalib/game/event/FoodDataEvent.java index e7c32127..877df0c7 100644 --- a/src/main/java/org/auioc/mcmod/arnicalib/game/event/FoodDataEvent.java +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/event/FoodDataEvent.java @@ -4,7 +4,7 @@ import net.minecraft.world.food.FoodData; import net.minecraftforge.event.entity.living.LivingEvent; -public class FoodDataEvent extends LivingEvent { +public abstract class FoodDataEvent extends LivingEvent { private final FoodData foodData; diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/event/ServerPlayerEvent.java b/src/main/java/org/auioc/mcmod/arnicalib/game/event/ServerPlayerEvent.java index 83dba996..896904bc 100644 --- a/src/main/java/org/auioc/mcmod/arnicalib/game/event/ServerPlayerEvent.java +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/event/ServerPlayerEvent.java @@ -3,7 +3,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraftforge.event.entity.living.LivingEvent; -public class ServerPlayerEvent extends LivingEvent { +public abstract class ServerPlayerEvent extends LivingEvent { private final ServerPlayer player; diff --git a/src/main/java/org/auioc/mcmod/arnicalib/server/event/AHServerEventFactory.java b/src/main/java/org/auioc/mcmod/arnicalib/server/event/AHServerEventFactory.java index 57654ea6..92b41d61 100644 --- a/src/main/java/org/auioc/mcmod/arnicalib/server/event/AHServerEventFactory.java +++ b/src/main/java/org/auioc/mcmod/arnicalib/server/event/AHServerEventFactory.java @@ -5,13 +5,10 @@ import java.util.Random; import java.util.UUID; import java.util.function.Function; -import javax.annotation.Nullable; import org.apache.logging.log4j.Marker; import org.auioc.mcmod.arnicalib.base.log.LogUtil; import org.auioc.mcmod.arnicalib.game.chat.TextUtils; import org.auioc.mcmod.arnicalib.server.event.impl.EyeOfEnderSurvivableEvent; -import org.auioc.mcmod.arnicalib.server.event.impl.FishingRodCastEvent; -import org.auioc.mcmod.arnicalib.server.event.impl.ItemHurtEvent; import org.auioc.mcmod.arnicalib.server.event.impl.LivingEatAddEffectEvent; import org.auioc.mcmod.arnicalib.server.event.impl.ServerLoginEvent; import org.auioc.mcmod.arnicalib.server.event.impl.ServerPlayerSendMessageEvent; @@ -20,14 +17,11 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.handshake.ClientIntentionPacket; import net.minecraft.network.protocol.login.ClientboundLoginDisconnectPacket; -import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.EyeOfEnder; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; @@ -72,18 +66,4 @@ public static Function onEyeOfEnderSetSurvivable(ServerPlayer p return event.getSurvivable(); } - // Coremod arnicalib.fishing_rod_item - public static FishingRodCastEvent.Pre preFishingRodCast(Player player, Level level, ItemStack fishingRod, int speedBonus, int luckBonus) { - var event = new FishingRodCastEvent.Pre((ServerPlayer) player, (ServerLevel) level, fishingRod, speedBonus, luckBonus); - BUS.post(event); - return event; - } - - // Coremod arnicalib.item_stack - public static int onItemHurt(ItemStack itemStack, int damage, Random random, @Nullable ServerPlayer player) { - var event = new ItemHurtEvent(itemStack, damage, random, player); - BUS.post(event); - return event.getDamage(); - } - } diff --git a/src/main/java/org/auioc/mcmod/arnicalib/server/event/impl/FishingRodCastEvent.java b/src/main/java/org/auioc/mcmod/arnicalib/server/event/impl/FishingRodCastEvent.java deleted file mode 100644 index 2da3b4f8..00000000 --- a/src/main/java/org/auioc/mcmod/arnicalib/server/event/impl/FishingRodCastEvent.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.auioc.mcmod.arnicalib.server.event.impl; - -import org.auioc.mcmod.arnicalib.game.event.ServerPlayerEvent; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; - -public class FishingRodCastEvent extends ServerPlayerEvent { - - private final ServerLevel level; - private final ItemStack fishingRod; - - public FishingRodCastEvent(ServerPlayer player, ServerLevel level, ItemStack fishingRod) { - super(player); - this.level = level; - this.fishingRod = fishingRod; - } - - public ServerLevel getLevel() { - return this.level; - } - - public ItemStack getFishingRod() { - return this.fishingRod; - } - - public static class Pre extends FishingRodCastEvent { - - private int speedBonus; - private int luckBonus; - - public Pre(ServerPlayer player, ServerLevel level, ItemStack fishingRod, int speedBonus, int luckBonus) { - super(player, level, fishingRod); - this.speedBonus = speedBonus; - this.luckBonus = luckBonus; - } - - public int getSpeedBonus() { - return this.speedBonus; - } - - public void setSpeedBonus(int speedBonus) { - this.speedBonus = speedBonus; - } - - public int getLuckBonus() { - return this.luckBonus; - } - - public void setLuckBonus(int luckBonus) { - this.luckBonus = luckBonus; - } - - } - -} diff --git a/src/main/java/org/auioc/mcmod/arnicalib/server/event/impl/ItemHurtEvent.java b/src/main/java/org/auioc/mcmod/arnicalib/server/event/impl/ItemHurtEvent.java deleted file mode 100644 index 6ea10511..00000000 --- a/src/main/java/org/auioc/mcmod/arnicalib/server/event/impl/ItemHurtEvent.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.auioc.mcmod.arnicalib.server.event.impl; - -import java.util.Random; -import javax.annotation.Nullable; -import org.auioc.mcmod.arnicalib.game.event.ServerPlayerEvent; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; - -public class ItemHurtEvent extends ServerPlayerEvent { - - private final ItemStack itemStack; - private final Random random; - private int damage; - - public ItemHurtEvent(ItemStack itemStack, int damage, Random random, @Nullable ServerPlayer player) { - super(player); - this.itemStack = itemStack; - this.damage = damage; - this.random = random; - } - - public ItemStack getItemStack() { - return this.itemStack; - } - - public Random getRandom() { - return this.random; - } - - public int getDamage() { - return this.damage; - } - - public void setDamage(int damage) { - this.damage = damage; - } - -} - diff --git a/src/main/resources/META-INF/coremods.json b/src/main/resources/META-INF/coremods.json deleted file mode 100644 index a25b7561..00000000 --- a/src/main/resources/META-INF/coremods.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "arnicalib.fishing_rod_item": "coremods/fishing_rod_item.js", - "arnicalib.item_stack": "coremods/item_stack.js" -} diff --git a/src/main/resources/coremods/fishing_rod_item.js b/src/main/resources/coremods/fishing_rod_item.js deleted file mode 100644 index bd11406e..00000000 --- a/src/main/resources/coremods/fishing_rod_item.js +++ /dev/null @@ -1,185 +0,0 @@ -function initializeCoreMod() { - ASMAPI = Java.type('net.minecraftforge.coremod.api.ASMAPI'); - - Opcodes = Java.type('org.objectweb.asm.Opcodes'); - - InsnList = Java.type('org.objectweb.asm.tree.InsnList'); - - VarInsnNode = Java.type('org.objectweb.asm.tree.VarInsnNode'); - MethodInsnNode = Java.type('org.objectweb.asm.tree.MethodInsnNode'); - LabelNode = Java.type('org.objectweb.asm.tree.LabelNode'); - LocalVariableNode = Java.type('org.objectweb.asm.tree.LocalVariableNode'); - - return { - 'FishingRodItem#use': { - target: { - type: 'METHOD', - class: 'net.minecraft.world.item.FishingRodItem', - methodName: ASMAPI.mapMethod('m_7203_'), - methodDesc: - '(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/InteractionResultHolder;', - }, - transformer: function (methodNode) { - var toInject = new InsnList(); - { - var fn_start = new LabelNode(); - var fn_end = new LabelNode(); - methodNode.localVariables.add( - new LocalVariableNode( - 'preEvent', - 'Lorg/auioc/mcmod/arnicalib/server/event/impl/FishingRodCastEvent$Pre;', - null, - fn_start, - fn_end, - 7 - ) - ); - toInject.add(fn_start); - toInject.add(new VarInsnNode(Opcodes.ALOAD, 2)); - toInject.add(new VarInsnNode(Opcodes.ALOAD, 1)); - toInject.add(new VarInsnNode(Opcodes.ALOAD, 4)); - toInject.add(new VarInsnNode(Opcodes.ILOAD, 5)); - toInject.add(new VarInsnNode(Opcodes.ILOAD, 6)); - toInject.add( - new MethodInsnNode( - Opcodes.INVOKESTATIC, - 'org/auioc/mcmod/arnicalib/server/event/AHServerEventFactory', - 'preFishingRodCast', - '(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/Level;Lnet/minecraft/world/item/ItemStack;II)Lorg/auioc/mcmod/arnicalib/server/event/impl/FishingRodCastEvent$Pre;', - false - ) - ); - toInject.add(new VarInsnNode(Opcodes.ASTORE, 7)); - toInject.add(new VarInsnNode(Opcodes.ALOAD, 7)); - toInject.add( - new MethodInsnNode( - Opcodes.INVOKEVIRTUAL, - 'org/auioc/mcmod/arnicalib/server/event/impl/FishingRodCastEvent$Pre', - 'getSpeedBonus', - '()I', - false - ) - ); - toInject.add(new VarInsnNode(Opcodes.ISTORE, 5)); - toInject.add(new VarInsnNode(Opcodes.ALOAD, 7)); - toInject.add( - new MethodInsnNode( - Opcodes.INVOKEVIRTUAL, - 'org/auioc/mcmod/arnicalib/server/event/impl/FishingRodCastEvent$Pre', - 'getLuckBonus', - '()I', - false - ) - ); - toInject.add(new VarInsnNode(Opcodes.ISTORE, 6)); - toInject.add(fn_end); - } - - var at = ASMAPI.findFirstInstructionBefore( - methodNode, - Opcodes.NEW, - 0 - ); - methodNode.instructions.insertBefore( - methodNode.instructions.get( - methodNode.instructions.indexOf(at) - 1 - ), - toInject - ); - - methodNode.visitMaxs(14, 8); - - // print(ASMAPI.methodNodeToString(methodNode)); - return methodNode; - }, - }, - }; -} - -//! SRG <-> MCP -/* - m_7203_ use -*/ - -//! LocalVariableTable -/* - Slot Name Signature - 5 i I - 5 j I - 6 k I - 0 this Lnet/minecraft/world/item/FishingRodItem; - 1 p_41290_ Lnet/minecraft/world/level/Level; - 2 p_41291_ Lnet/minecraft/world/entity/player/Player; - 3 p_41292_ Lnet/minecraft/world/InteractionHand; - 4 itemstack Lnet/minecraft/world/item/ItemStack; -+ 7 preEvent Lorg/auioc/mcmod/arnicalib/server/event/impl/FishingRodCastEvent$Pre; -*/ - -//! Code -/* - public InteractionResultHolder use(Level p_41290_, Player p_41291_, InteractionHand p_41292_) { - ItemStack itemstack = p_41291_.getItemInHand(p_41292_); - if (p_41291_.fishing != null) { - //_ ... - } else { - //_ ... - if (!p_41290_.isClientSide) { - int k = EnchantmentHelper.getFishingSpeedBonus(itemstack); - int j = EnchantmentHelper.getFishingLuckBonus(itemstack); -+ var preEvent = org.auioc.mcmod.arnicalib.server.event.AHServerEventFactory.preFishingRodCast(p_41291_, p_41290_, itemstack, k, j); -+ k = preEvent.getSpeedBonus(); -+ j = preEvent.getLuckBonus(); - p_41290_.addFreshEntity(new FishingHook(p_41291_, p_41290_, j, k)); - } - //_ ... - } - return InteractionResultHolder.sidedSuccess(itemstack, p_41290_.isClientSide()); - } -* ========== ByteCode ========== * - //_ ... - L9 - LINENUMBER 33 L9 - ALOAD 1 - GETFIELD net/minecraft/world/level/Level.isClientSide : Z - IFNE L10 - L11 - LINENUMBER 34 L11 - ALOAD 4 - INVOKESTATIC net/minecraft/world/item/enchantment/EnchantmentHelper.getFishingSpeedBonus (Lnet/minecraft/world/item/ItemStack;)I - ISTORE 5 - L12 - LINENUMBER 35 L12 - ALOAD 4 - INVOKESTATIC net/minecraft/world/item/enchantment/EnchantmentHelper.getFishingLuckBonus (Lnet/minecraft/world/item/ItemStack;)I - ISTORE 6 - L13 - LINENUMBER 36 L13 -+ L14 -+ ALOAD 2 -+ ALOAD 1 -+ ALOAD 4 -+ ILOAD 5 -+ ILOAD 6 -+ INVOKESTATIC org/auioc/mcmod/arnicalib/server/event/AHServerEventFactory.preFishingRodCast (Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/Level;Lnet/minecraft/world/item/ItemStack;II)Lorg/auioc/mcmod/arnicalib/server/event/impl/FishingRodCastEvent$Pre; -+ ASTORE 7 -+ ALOAD 7 -+ INVOKEVIRTUAL org/auioc/mcmod/arnicalib/server/event/impl/FishingRodCastEvent$Pre.getSpeedBonus ()I -+ ISTORE 5 -+ ALOAD 7 -+ INVOKEVIRTUAL org/auioc/mcmod/arnicalib/server/event/impl/FishingRodCastEvent$Pre.getLuckBonus ()I -+ ISTORE 6 -+ L15 - ALOAD 1 - NEW net/minecraft/world/entity/projectile/FishingHook - DUP - ALOAD 2 - ALOAD 1 - ILOAD 6 - ILOAD 5 - INVOKESPECIAL net/minecraft/world/entity/projectile/FishingHook. (Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/Level;II)V - INVOKEVIRTUAL net/minecraft/world/level/Level.addFreshEntity (Lnet/minecraft/world/entity/Entity;)Z - POP - //_ ... -- MAXLOCALS = 7 -+ MAXLOCALS = 8 -*/ diff --git a/src/main/resources/coremods/item_stack.js b/src/main/resources/coremods/item_stack.js deleted file mode 100644 index 2a666713..00000000 --- a/src/main/resources/coremods/item_stack.js +++ /dev/null @@ -1,113 +0,0 @@ -function initializeCoreMod() { - ASMAPI = Java.type('net.minecraftforge.coremod.api.ASMAPI'); - - Opcodes = Java.type('org.objectweb.asm.Opcodes'); - - InsnList = Java.type('org.objectweb.asm.tree.InsnList'); - - VarInsnNode = Java.type('org.objectweb.asm.tree.VarInsnNode'); - MethodInsnNode = Java.type('org.objectweb.asm.tree.MethodInsnNode'); - - return { - 'ItemStack#hurt': { - target: { - type: 'METHOD', - class: 'net.minecraft.world.item.ItemStack', - methodName: ASMAPI.mapMethod('m_41629_'), - methodDesc: - '(ILjava/util/Random;Lnet/minecraft/server/level/ServerPlayer;)Z', - }, - transformer: function (methodNode) { - var toInject = new InsnList(); - { - toInject.add(new VarInsnNode(Opcodes.ALOAD, 0)); - toInject.add(new VarInsnNode(Opcodes.ILOAD, 1)); - toInject.add(new VarInsnNode(Opcodes.ALOAD, 2)); - toInject.add(new VarInsnNode(Opcodes.ALOAD, 3)); - toInject.add( - new MethodInsnNode( - Opcodes.INVOKESTATIC, - 'org/auioc/mcmod/arnicalib/server/event/AHServerEventFactory', - 'onItemHurt', - '(Lnet/minecraft/world/item/ItemStack;ILjava/util/Random;Lnet/minecraft/server/level/ServerPlayer;)I', - false - ) - ); - toInject.add(new VarInsnNode(Opcodes.ISTORE, 1)); - } - - var at = ASMAPI.findFirstInstructionAfter( - methodNode, - Opcodes.ILOAD, - 0 - ); - methodNode.instructions.insertBefore(at, toInject); - - methodNode.visitMaxs(6, 7); - - // print(ASMAPI.methodNodeToString(methodNode)); - return methodNode; - }, - }, - }; -} - -//! SRG <-> MCP -/* - m_41629_ hurt -*/ - -//! LocalVariableTable -/* - Slot Name Signature - 6 k I - 4 i I - 5 j I - 4 l I - 0 this Lnet/minecraft/world/item/ItemStack; - 1 p_41630_ I - 2 p_41631_ Ljava/util/Random; - 3 p_41632_ Lnet/minecraft/server/level/ServerPlayer; -*/ - -//! Code -/* - public boolean hurt(int p_41630_, Random p_41631_, @Nullable ServerPlayer p_41632_) { - if (!this.isDamageableItem()) { - return false; - } else { -+ p_41630_ = org.auioc.mcmod.arnicalib.server.event.AHServerEventFactory.onItemHurt(this, p_41630_, p_41631_, p_41632_); - if (p_41630_ > 0) { - //_ ... - } - //_ ... - } - } -* ========== ByteCode ========== * - L0 - LINENUMBER 308 L0 - ALOAD 0 - INVOKEVIRTUAL net/minecraft/world/item/ItemStack.isDamageableItem ()Z - IFNE L1 - L2 - LINENUMBER 309 L2 - ICONST_0 - IRETURN - L1 - LINENUMBER 311 L1 - FRAME SAME -+ ALOAD 0 -+ ILOAD 1 -+ ALOAD 2 -+ ALOAD 3 -+ INVOKESTATIC org/auioc/mcmod/arnicalib/server/event/AHServerEventFactory.onItemHurt (Lnet/minecraft/world/item/ItemStack;ILjava/util/Random;Lnet/minecraft/server/level/ServerPlayer;)I -+ ISTORE 1 - ILOAD 1 - IFLE L3 - L4 - LINENUMBER 312 L4 - //_ ... - -- MAXSTACK = 5 -+ MAXSTACK = 6 -*/