diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/modelengine/ModelEngineUtils.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/modelengine/ModelEngineUtils.java index 8276dac0c..a2f952689 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/modelengine/ModelEngineUtils.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/modelengine/ModelEngineUtils.java @@ -12,4 +12,16 @@ public class ModelEngineUtils { ActiveModel activeModel = ModelEngineAPI.createActiveModel(id); modeledEntity.addModel(activeModel, true); } + + public static int interactionToBaseEntity(int entityId) { + ActiveModel activeModel = ModelEngineAPI.getInteractionTracker().getModelRelay(entityId); + if (activeModel != null) { + ModeledEntity modeledEntity = activeModel.getModeledEntity(); + if (modeledEntity == null) { + return entityId; + } + return modeledEntity.getBase().getEntityId(); + } + return entityId; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java index 939cf62f8..c87622e84 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java @@ -69,6 +69,11 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes private boolean active; private boolean init; + private static boolean hasModelEngine; + + public static boolean hasModelEngine() { + return hasModelEngine; + } public BukkitNetworkManager(BukkitCraftEngine plugin) { this.plugin = plugin; @@ -111,6 +116,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes } }; this.active = true; + this.hasModelEngine = Bukkit.getPluginManager().getPlugin("ModelEngine") != null; instance = this; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index b32e40ab0..781568391 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -9,6 +9,7 @@ import net.momirealms.craftengine.bukkit.api.CraftEngineFurniture; import net.momirealms.craftengine.bukkit.api.event.FurnitureBreakEvent; import net.momirealms.craftengine.bukkit.api.event.FurnitureInteractEvent; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; +import net.momirealms.craftengine.bukkit.compatibility.modelengine.ModelEngineUtils; import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager; import net.momirealms.craftengine.bukkit.entity.furniture.LoadedFurniture; import net.momirealms.craftengine.bukkit.nms.FastNMS; @@ -671,7 +672,13 @@ public class PacketConsumers { try { Player player = (Player) user.platformPlayer(); if (player == null) return; - int entityId = (int) Reflections.field$ServerboundInteractPacket$entityId.get(packet); + int entityId; + if (BukkitNetworkManager.hasModelEngine()) { + int fakeId = (int) Reflections.field$ServerboundInteractPacket$entityId.get(packet); + entityId = ModelEngineUtils.interactionToBaseEntity(fakeId); + } else { + entityId = Reflections.field$ServerboundInteractPacket$entityId.getInt(packet); + } Object action = Reflections.field$ServerboundInteractPacket$action.get(packet); Object actionType = Reflections.method$ServerboundInteractPacket$Action$getType.invoke(action); if (actionType == null) return;