From fd24eec4fc0a267cf62bcf24db40b4c6caa58695 Mon Sep 17 00:00:00 2001 From: MaXFeeD Date: Sat, 10 Feb 2024 16:42:11 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B8=D0=B3=D1=80=D0=BE=D0=BA=D0=BE=D0=B2=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - В случае если команда приходит от игрока, меняется последний аргумент калбека `fromPacket`. --- src/main/java/com/reider745/Main.java | 4 ++-- .../com/reider745/event/EventListener.java | 19 +++++++++++++++---- .../CraftingTransactionPacket.java} | 4 ++-- .../innercore/api/NativeCallback.java | 18 +++++++++--------- 4 files changed, 28 insertions(+), 17 deletions(-) rename src/main/java/com/reider745/{workbench/Workbench.java => network/CraftingTransactionPacket.java} (93%) diff --git a/src/main/java/com/reider745/Main.java b/src/main/java/com/reider745/Main.java index 7418ffc1..5f23f5d8 100644 --- a/src/main/java/com/reider745/Main.java +++ b/src/main/java/com/reider745/Main.java @@ -9,8 +9,8 @@ import com.reider745.api.hooks.JarEditor; import com.reider745.hooks.*; import com.reider745.hooks.bugfix.DimensionsFix; import com.reider745.hooks.bugfix.EntityItemHooks; +import com.reider745.network.CraftingTransactionPacket; import com.reider745.network.InnerCorePacket; -import com.reider745.workbench.Workbench; public class Main { public static InnerCoreServer innerCoreServer = new InnerCoreServer(); @@ -71,6 +71,7 @@ public class Main { loader.registerHooksInitializationForClass(NetworkHooks.class); loader.registerHooksInitializationForClass(GlobalBlockPalette.class); loader.registerHooksInitializationForClass(ServerHooks.class); + loader.registerHooksInitializationForClass(CraftingTransactionPacket.class); loader.registerHooksInitializationForClass(Other.class); loader.registerHooksInitializationForClass(PlayerHooks.class); loader.registerHooksInitializationForClass(RuntimeItemsHooks.class); @@ -78,7 +79,6 @@ public class Main { loader.registerHooksInitializationForClass(LevelHooks.class); loader.registerHooksInitializationForClass(ItemUtils.class); loader.registerHooksInitializationForClass(AndroidHooks.class); - loader.registerHooksInitializationForClass(Workbench.class); if (Arrays.stream(args).anyMatch("--snowfall-everywhere"::equals)) { loader.registerHooksInitializationForClass(SnowfallEverywhere.class); diff --git a/src/main/java/com/reider745/event/EventListener.java b/src/main/java/com/reider745/event/EventListener.java index b6718f2a..2ab4ca92 100644 --- a/src/main/java/com/reider745/event/EventListener.java +++ b/src/main/java/com/reider745/event/EventListener.java @@ -20,6 +20,7 @@ import cn.nukkit.event.entity.EntityDamageEvent.DamageCause; import cn.nukkit.event.inventory.CraftItemEvent; import cn.nukkit.event.inventory.InventoryPickupItemEvent; import cn.nukkit.event.level.ChunkPopulateEvent; +import cn.nukkit.event.player.PlayerCommandPreprocessEvent; import cn.nukkit.event.player.PlayerDeathEvent; import cn.nukkit.event.player.PlayerEatFoodEvent; import cn.nukkit.event.player.PlayerExperienceChangeEvent; @@ -383,13 +384,25 @@ public class EventListener implements Listener { NativeCallback.onCustomDimensionTransfer(event.getEntity().getId(), from, to); } + @EventHandler(priority = EventPriority.HIGHEST) public void onServerCommand(ServerCommandEvent event) { final CommandSender sender = event.getSender(); final Position position = sender.getPosition(); final long entityUid = sender.isEntity() ? sender.asEntity().getId() : 0; - consumeEvent(event, () -> NativeCallback.onServerCommand(event.getCommand(), (float) position.x, - (float) position.y, (float) position.z, entityUid)); + consumeEvent(event, () -> NativeCallback.onServerCommand(event.getCommand(), + (float) position.x, (float) position.y, (float) position.z, entityUid, false)); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerCommand(PlayerCommandPreprocessEvent event) { + long playerUid = event.getPlayer().getId(); + Position position = event.getPlayer().getPosition(); + String command = event.getMessage(); + + consumeEvent(event, + () -> NativeCallback.onServerCommand(command.charAt(0) == '/' ? command.substring(1) : command, + (float) position.x, (float) position.y, (float) position.z, playerUid, true)); } @EventHandler(priority = EventPriority.HIGHEST) @@ -467,6 +480,4 @@ public class EventListener implements Listener { // TODO: onItemUseComplete (not only custom items) // TODO: onItemDispensed - - // TODO: onWorkbenchCraft } diff --git a/src/main/java/com/reider745/workbench/Workbench.java b/src/main/java/com/reider745/network/CraftingTransactionPacket.java similarity index 93% rename from src/main/java/com/reider745/workbench/Workbench.java rename to src/main/java/com/reider745/network/CraftingTransactionPacket.java index d5caaedb..db36718b 100644 --- a/src/main/java/com/reider745/workbench/Workbench.java +++ b/src/main/java/com/reider745/network/CraftingTransactionPacket.java @@ -1,4 +1,4 @@ -package com.reider745.workbench; +package com.reider745.network; import cn.nukkit.inventory.Inventory; import cn.nukkit.inventory.PlayerInventory; @@ -13,7 +13,7 @@ import com.reider745.api.hooks.annotation.Hooks; import com.reider745.api.hooks.annotation.Inject; @Hooks(className = "cn.nukkit.inventory.transaction.CraftingTransaction") -public class Workbench implements HookClass { +public class CraftingTransactionPacket implements HookClass { @Inject(type = TypeHook.BEFORE_REPLACE) public static void sendInventories(CraftingTransaction transaction) { diff --git a/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java b/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java index 4e450c0c..8460d94b 100644 --- a/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java +++ b/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java @@ -497,8 +497,8 @@ public class NativeCallback { new Pair("someFloat", anotherFloat))); } - public static void onServerCommand(String command, float x, float y, float z, long entity) { - Callback.invokeAPICallback("ServerCommand", command, new Coords(x, y, z), entity); + public static void onServerCommand(String command, float x, float y, float z, long entity, boolean fromPacket) { + Callback.invokeAPICallback("ServerCommand", command, new Coords(x, y, z), entity, fromPacket); } /* PLAYER CALLBACKS */ @@ -631,13 +631,13 @@ public class NativeCallback { someBool2); // if (entity == NativeAPI.getPlayer()) { - // ArmorRegistry.onHurt(attacker, damageValue, damageType, someBool1, - // someBool2); + // ArmorRegistry.onHurt(attacker, damageValue, damageType, someBool1, someBool2); // } } public static void onThrowableHit(long projectile, float hitX, float hitY, float hitZ, long entity, int blockX, - int blockY, int blockZ, int blockSide, int itemId, int itemCount, int itemData, NativeItemInstanceExtra itemExtra) { + int blockY, int blockZ, int blockSide, int itemId, int itemCount, int itemData, + NativeItemInstanceExtra itemExtra) { Callback.invokeAPICallback("ProjectileHit", projectile, new ItemInstance(itemId, itemCount, itemData, itemExtra), new ScriptableParams( @@ -741,8 +741,8 @@ public class NativeCallback { .useNotSupport("NativeCallback.onItemDispensed(x, y, z, side, id, count, data, extra, region, slot)"); } - public static void onItemDispensed(float x, float y, float z, int side, int id, int count, int data, NativeItemInstanceExtra extra, - Level level, int slot) { + public static void onItemDispensed(float x, float y, float z, int side, int id, int count, int data, + NativeItemInstanceExtra extra, Level level, int slot) { int rx = (int) Math.floor(x); int ry = (int) Math.floor(y); int rz = (int) Math.floor(z); @@ -790,8 +790,8 @@ public class NativeCallback { } } - public static void onEnchantPostHurt(int enchantId, int itemId, int itemCount, int itemData, NativeItemInstanceExtra itemExtra, - int damage, long actor1, long actor2) { + public static void onEnchantPostHurt(int enchantId, int itemId, int itemCount, int itemData, + NativeItemInstanceExtra itemExtra, int damage, long actor1, long actor2) { ItemStack item = new ItemStack(itemId, itemCount, itemData, itemExtra); Callback.invokeAPICallback("EnchantPostHurt", enchantId, item, damage, actor1, actor2); if (!NativeAPI.isDefaultPrevented()) {