From d5947cd62dc4d48aa25a004f5526192d6838d8c6 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 5 Apr 2025 11:31:20 +0800 Subject: [PATCH] =?UTF-8?q?feat(core):=20=E4=BC=98=E5=8C=96=20BlockDisplay?= =?UTF-8?q?=20=E5=AE=9E=E4=BD=93=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../loader/src/main/resources/craft-engine.properties | 2 +- .../bukkit/plugin/network/PacketConsumers.java | 10 ++++------ .../bukkit/plugin/user/BukkitServerPlayer.java | 6 ++++++ .../craftengine/core/plugin/network/NetWorkUser.java | 2 ++ gradle.properties | 1 + 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/bukkit/loader/src/main/resources/craft-engine.properties b/bukkit/loader/src/main/resources/craft-engine.properties index 1972baa7d..eaa6b7b88 100644 --- a/bukkit/loader/src/main/resources/craft-engine.properties +++ b/bukkit/loader/src/main/resources/craft-engine.properties @@ -2,7 +2,7 @@ config=${config_version} builder=${builder} supported-languages=${supported_languages} lang-version=${lang_version} -latest-version=${latest_minecraft_version} +latest-version=${latest_supported_version} asm=${asm_version} asm-commons=${asm_commons_version} jar-relocator=${jar_relocator_version} 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 8893933f0..6ba4b8636 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 @@ -637,6 +637,9 @@ public class PacketConsumers { if (furniture != null) { event.setCancelled(true); } + } else if (entityType == Reflections.instance$EntityType$BLOCK_DISPLAY) { + int entityId = (int) Reflections.field$ClientboundAddEntityPacket$entityId.get(packet); + user.entityView().put(entityId, entityType); } } catch (Exception e) { CraftEngine.instance().logger().warn("Failed to handle ClientboundAddEntityPacket", e); @@ -966,12 +969,7 @@ public class PacketConsumers { public static final TriConsumer SET_ENTITY_DATA = (user, event, packet) -> { try { int id = (int) Reflections.field$ClientboundSetEntityDataPacket$id.get(packet); - Object player = user.serverPlayer(); - Object level = Reflections.method$Entity$level.invoke(player); - Object entityLookup = Reflections.method$Level$moonrise$getEntityLookup.invoke(level); - Object entity = Reflections.method$EntityLookup$get.invoke(entityLookup, id); - if (entity == null) return; - Object entityType = Reflections.method$Entity$getType.invoke(entity); + Object entityType = user.entityView().get(id); if (entityType == Reflections.instance$EntityType$BLOCK_DISPLAY) { List packedItems = (List) Reflections.field$ClientboundSetEntityDataPacket$packedItems.get(packet); for (int i = 0; i < packedItems.size(); i++) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java index bb6dd519e..630f023b6 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java @@ -70,6 +70,7 @@ public class BukkitServerPlayer extends Player { private boolean hasClientMod = false; // for better fake furniture visual sync private final Map> furnitureView = new ConcurrentHashMap<>(); + private final Map blockDisplayView = new ConcurrentHashMap<>(); public BukkitServerPlayer(BukkitCraftEngine plugin, Channel channel) { this.channel = channel; @@ -618,6 +619,11 @@ public class BukkitServerPlayer extends Player { return this.furnitureView; } + @Override + public Map entityView() { + return this.blockDisplayView; + } + public void setResendSound() { resentSoundTick = gameTicks(); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java index 4844ff92d..575a59f9f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java @@ -40,4 +40,6 @@ public interface NetWorkUser { boolean clientModEnabled(); void setClientModState(boolean enable); + + Map entityView(); } diff --git a/gradle.properties b/gradle.properties index 6ad04d93c..f5769473f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,6 +6,7 @@ project_version=0.0.43 config_version=20 lang_version=4 project_group=net.momirealms +latest_supported_version=1.21.5 latest_minecraft_version=1.21.4 # Supported languages