From 61e37bfcf47a54de6344c188b45c3bdae6b4d53e Mon Sep 17 00:00:00 2001 From: MaXFeeD Date: Sat, 10 Feb 2024 20:19:06 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=BC=D0=BD=D0=BE=D0=B9=20=D0=B1=D1=80=D0=BE=D0=BD?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Броню теперь можно надевать на стойку, а не только ложить ее в руку. - Броня надевается без открытия инвентаря. --- src/main/java/com/reider745/Main.java | 3 +- .../com/reider745/hooks/EntityOverrides.java | 27 ++++++++++++ .../hooks/{Other.java => RhinoOverrides.java} | 2 +- .../com/reider745/item/CustomArmorItem.java | 42 +++++++++++++++++++ 4 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/reider745/hooks/EntityOverrides.java rename src/main/java/com/reider745/hooks/{Other.java => RhinoOverrides.java} (96%) diff --git a/src/main/java/com/reider745/Main.java b/src/main/java/com/reider745/Main.java index 5f23f5d8..19a695dc 100644 --- a/src/main/java/com/reider745/Main.java +++ b/src/main/java/com/reider745/Main.java @@ -72,12 +72,13 @@ public class Main { loader.registerHooksInitializationForClass(GlobalBlockPalette.class); loader.registerHooksInitializationForClass(ServerHooks.class); loader.registerHooksInitializationForClass(CraftingTransactionPacket.class); - loader.registerHooksInitializationForClass(Other.class); + loader.registerHooksInitializationForClass(RhinoOverrides.class); loader.registerHooksInitializationForClass(PlayerHooks.class); loader.registerHooksInitializationForClass(RuntimeItemsHooks.class); loader.registerHooksInitializationForClass(BlocksHooks.class); loader.registerHooksInitializationForClass(LevelHooks.class); loader.registerHooksInitializationForClass(ItemUtils.class); + loader.registerHooksInitializationForClass(EntityOverrides.class); loader.registerHooksInitializationForClass(AndroidHooks.class); if (Arrays.stream(args).anyMatch("--snowfall-everywhere"::equals)) { diff --git a/src/main/java/com/reider745/hooks/EntityOverrides.java b/src/main/java/com/reider745/hooks/EntityOverrides.java new file mode 100644 index 00000000..ef5844dd --- /dev/null +++ b/src/main/java/com/reider745/hooks/EntityOverrides.java @@ -0,0 +1,27 @@ +package com.reider745.hooks; + +import com.reider745.api.hooks.HookClass; +import com.reider745.api.hooks.annotation.Hooks; + +import javassist.CannotCompileException; +import javassist.CtClass; +import javassist.CtMethod; +import javassist.NotFoundException; + +@Hooks(className = "cn.nukkit.entity.item.EntityArmorStand") +public class EntityOverrides implements HookClass { + + @Override + public void init(CtClass ctClass) { + try { + CtMethod onInteractMethod = ctClass.getDeclaredMethod("onInteract"); + onInteractMethod.insertAt(onInteractMethod.getMethodInfo().getLineNumber(70), + "if (flag && item instanceof com.reider745.item.CustomArmorItem) {" + + "i = ((com.reider745.item.CustomArmorItem) item).getArmorSlot();" + + "isArmorSlot = true;" + + "}"); + } catch (NotFoundException | CannotCompileException e) { + System.out.println("Nukkit-MOT has been updated and overrides for `EntityArmorStand.onInteract` method are no longer available."); + } + } +} diff --git a/src/main/java/com/reider745/hooks/Other.java b/src/main/java/com/reider745/hooks/RhinoOverrides.java similarity index 96% rename from src/main/java/com/reider745/hooks/Other.java rename to src/main/java/com/reider745/hooks/RhinoOverrides.java index d4bd02e6..deb3bede 100644 --- a/src/main/java/com/reider745/hooks/Other.java +++ b/src/main/java/com/reider745/hooks/RhinoOverrides.java @@ -15,7 +15,7 @@ import com.reider745.api.hooks.annotation.Hooks; import com.reider745.api.hooks.annotation.Inject; @Hooks(className = "org.mozilla.javascript.JavaMembers") -public class Other implements HookClass { +public class RhinoOverrides implements HookClass { private static final Logger logger = LogManager.getLogger(MainLogger.class); @Override diff --git a/src/main/java/com/reider745/item/CustomArmorItem.java b/src/main/java/com/reider745/item/CustomArmorItem.java index f4173753..82f25662 100644 --- a/src/main/java/com/reider745/item/CustomArmorItem.java +++ b/src/main/java/com/reider745/item/CustomArmorItem.java @@ -4,6 +4,11 @@ import com.reider745.api.CustomManager; import com.reider745.item.ItemMethod.PropertiesNames; +import cn.nukkit.Player; +import cn.nukkit.item.Item; +import cn.nukkit.math.Vector3; +import cn.nukkit.network.protocol.LevelSoundEventPacket; + public class CustomArmorItem extends CustomItemClass { private int slot; @@ -21,6 +26,10 @@ public class CustomArmorItem extends CustomItemClass { this.slot = parameters.get(PropertiesNames.Armors.SLOT, -1); } + public int getArmorSlot() { + return slot; + } + @Override public boolean isArmor() { return true; @@ -65,4 +74,37 @@ public class CustomArmorItem extends CustomItemClass { public int getToughness() { return (int) (float) parameters.get(PropertiesNames.Armors.KNOCKBACK_RESIST, 0f); } + + @Override + public boolean onClickAir(Player player, Vector3 directionVector) { + boolean equip = false; + Item oldSlotItem = Item.get(AIR); + if (this.isHelmet()) { + oldSlotItem = player.getInventory().getHelmetFast(); + if (player.getInventory().setHelmet(this)) { + equip = true; + } + } else if (this.isChestplate()) { + oldSlotItem = player.getInventory().getChestplateFast(); + if (player.getInventory().setChestplate(this)) { + equip = true; + } + } else if (this.isLeggings()) { + oldSlotItem = player.getInventory().getLeggingsFast(); + if (player.getInventory().setLeggings(this)) { + equip = true; + } + } else if (this.isBoots()) { + oldSlotItem = player.getInventory().getBootsFast(); + if (player.getInventory().setBoots(this)) { + equip = true; + } + } + if (equip) { + player.getInventory().setItem(player.getInventory().getHeldItemIndex(), oldSlotItem); + player.getLevel().addLevelSoundEvent(player, LevelSoundEventPacket.SOUND_ARMOR_EQUIP_GENERIC); + } + + return this.getCount() == 0; + } }