9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-23 17:09:19 +00:00

improve MEG compatibility

This commit is contained in:
XiaoMoMi
2025-04-01 04:12:21 +08:00
parent 8ecc78b28a
commit cf53e4b243
3 changed files with 26 additions and 1 deletions

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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;