diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java index ff38f3b8d..008bb53b8 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java @@ -41,6 +41,7 @@ public class BukkitCommandManager extends AbstractCommandManager new DebugGetBlockInternalIdCommand(this, plugin), new DebugAppearanceStateUsageCommand(this, plugin), new DebugClearCooldownCommand(this, plugin), + new DebugEntityIdCommand(this, plugin), new DebugRealStateUsageCommand(this, plugin), new DebugItemDataCommand(this, plugin), new DebugSetBlockCommand(this, plugin), diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugEntityIdCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugEntityIdCommand.java new file mode 100644 index 000000000..2513f665e --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugEntityIdCommand.java @@ -0,0 +1,42 @@ +package net.momirealms.craftengine.bukkit.plugin.command.feature; + +import net.momirealms.craftengine.bukkit.nms.FastNMS; +import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; +import net.momirealms.craftengine.core.plugin.CraftEngine; +import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; +import org.bukkit.World; +import org.bukkit.command.CommandSender; +import org.incendo.cloud.Command; +import org.incendo.cloud.CommandManager; +import org.incendo.cloud.bukkit.parser.WorldParser; +import org.incendo.cloud.parser.standard.IntegerParser; + +public class DebugEntityIdCommand extends BukkitCommandFeature { + + public DebugEntityIdCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { + super(commandManager, plugin); + } + + @Override + public Command.Builder assembleCommand(CommandManager manager, Command.Builder builder) { + return builder + .required("world", WorldParser.worldParser()) + .required("entityId", IntegerParser.integerParser()) + .handler(context -> { + World world = context.get("world"); + int entityId = context.get("entityId"); + Object entityLookup = FastNMS.INSTANCE.method$ServerLevel$getEntityLookup(FastNMS.INSTANCE.field$CraftWorld$ServerLevel(world)); + Object entity = FastNMS.INSTANCE.method$EntityLookup$get(entityLookup, entityId); + if (entity == null) { + context.sender().sendMessage("entity not found"); + return; + } + context.sender().sendMessage(entity.toString()); + }); + } + + @Override + public String getFeatureID() { + return "debug_entity_id"; + } +} \ No newline at end of file diff --git a/common-files/src/main/resources/commands.yml b/common-files/src/main/resources/commands.yml index f46602c17..3ac0d8c5c 100644 --- a/common-files/src/main/resources/commands.yml +++ b/common-files/src/main/resources/commands.yml @@ -196,6 +196,13 @@ debug_is_chunk_persistent_loaded: - /craftengine debug is-chunk-persistent-loaded - /ce debug is-chunk-persistent-loaded +debug_entity_id: + enable: true + permission: ce.command.debug.debug_entity_id + usage: + - /craftengine debug entity-id + - /ce debug entity-id + debug_test: enable: true permission: ce.command.debug.test diff --git a/gradle.properties b/gradle.properties index 99f75c8d9..b5d35bcb7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -50,7 +50,7 @@ byte_buddy_version=1.17.5 ahocorasick_version=0.6.3 snake_yaml_version=2.4 anti_grief_version=0.18 -nms_helper_version=1.0.25 +nms_helper_version=1.0.26 evalex_version=3.5.0 reactive_streams_version=1.0.4 amazon_awssdk_version=2.31.23