From fae874646cd001537c05e6f81c561f68a4205e01 Mon Sep 17 00:00:00 2001 From: jhqwqmc Date: Sun, 7 Dec 2025 07:16:16 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=A1=A5=E5=85=A8=E7=9B=94=E7=94=B2?= =?UTF-8?q?=E6=9E=B6=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/entity/data/ArmorStandData.java | 8 +++++ .../reflection/minecraft/CoreReflections.java | 31 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/ArmorStandData.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/ArmorStandData.java index b57c49046..6ebb93b9f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/ArmorStandData.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/data/ArmorStandData.java @@ -1,8 +1,16 @@ package net.momirealms.craftengine.bukkit.entity.data; +import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections; + public class ArmorStandData extends LivingEntityData { public static final ArmorStandData ArmorStandFlags = new ArmorStandData<>(ArmorStandData.class, EntityDataValue.Serializers$BYTE, (byte) 0); // rotations + public static final ArmorStandData HeadPose = new ArmorStandData<>(ArmorStandData.class, EntityDataValue.Serializers$ROTATIONS, CoreReflections.instance$ArmorStand$DEFAULT_HEAD_POSE); + public static final ArmorStandData BodyPose = new ArmorStandData<>(ArmorStandData.class, EntityDataValue.Serializers$ROTATIONS, CoreReflections.instance$ArmorStand$DEFAULT_BODY_POSE); + public static final ArmorStandData LeftArmPose = new ArmorStandData<>(ArmorStandData.class, EntityDataValue.Serializers$ROTATIONS, CoreReflections.instance$ArmorStand$DEFAULT_LEFT_ARM_POSE); + public static final ArmorStandData RightArmPose = new ArmorStandData<>(ArmorStandData.class, EntityDataValue.Serializers$ROTATIONS, CoreReflections.instance$ArmorStand$DEFAULT_RIGHT_ARM_POSE); + public static final ArmorStandData LeftLegPose = new ArmorStandData<>(ArmorStandData.class, EntityDataValue.Serializers$ROTATIONS, CoreReflections.instance$ArmorStand$DEFAULT_LEFT_LEG_POSE); + public static final ArmorStandData RightLegPose = new ArmorStandData<>(ArmorStandData.class, EntityDataValue.Serializers$ROTATIONS, CoreReflections.instance$ArmorStand$DEFAULT_RIGHT_LEG_POSE); public ArmorStandData(Class clazz, Object serializer, T defaultValue) { super(clazz, serializer, defaultValue); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java index c1f11650e..06ea0d4a1 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java @@ -4644,4 +4644,35 @@ public final class CoreReflections { "world.scores.PlayerTeam" ) ); + + public static final Class clazz$Rotations = requireNonNull( + BukkitReflectionUtils.findReobfOrMojmapClass( + "core.Vector3f", + "core.Rotations" + ) + ); + + public static final Constructor constructor$Rotations = requireNonNull( + ReflectionUtils.getConstructor(clazz$Rotations, float.class, float.class, float.class) + ); + + public static final Object instance$ArmorStand$DEFAULT_HEAD_POSE; + public static final Object instance$ArmorStand$DEFAULT_BODY_POSE; + public static final Object instance$ArmorStand$DEFAULT_LEFT_ARM_POSE; + public static final Object instance$ArmorStand$DEFAULT_RIGHT_ARM_POSE; + public static final Object instance$ArmorStand$DEFAULT_LEFT_LEG_POSE; + public static final Object instance$ArmorStand$DEFAULT_RIGHT_LEG_POSE; + + static { + try { + instance$ArmorStand$DEFAULT_HEAD_POSE = constructor$Rotations.newInstance(0.0F, 0.0F, 0.0F); + instance$ArmorStand$DEFAULT_BODY_POSE = constructor$Rotations.newInstance(0.0F, 0.0F, 0.0F); + instance$ArmorStand$DEFAULT_LEFT_ARM_POSE = constructor$Rotations.newInstance(-10.0F, 0.0F, -10.0F); + instance$ArmorStand$DEFAULT_RIGHT_ARM_POSE = constructor$Rotations.newInstance(-15.0F, 0.0F, 10.0F); + instance$ArmorStand$DEFAULT_LEFT_LEG_POSE = constructor$Rotations.newInstance(-1.0F, 0.0F, -1.0F); + instance$ArmorStand$DEFAULT_RIGHT_LEG_POSE = constructor$Rotations.newInstance(1.0F, 0.0F, 1.0F); + } catch (ReflectiveOperationException e) { + throw new ReflectionInitException("Failed to init ArmorStand", e); + } + } } From ef143abcbe2120eade29f4700dd3e486cce1cce0 Mon Sep 17 00:00:00 2001 From: jhqwqmc Date: Sun, 7 Dec 2025 12:12:34 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E9=9B=86=E6=88=90=E6=9C=8D=E5=8A=A1=E5=99=A8=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=8F=B0=E8=BE=93=E5=87=BA=E4=B8=AD=E6=96=87=E7=BC=96=E7=A0=81?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bukkit/paper-loader/build.gradle.kts | 3 +++ .../net/momirealms/craftengine/core/util/VersionHelper.java | 1 + 2 files changed, 4 insertions(+) diff --git a/bukkit/paper-loader/build.gradle.kts b/bukkit/paper-loader/build.gradle.kts index aba556f45..41bb27752 100644 --- a/bukkit/paper-loader/build.gradle.kts +++ b/bukkit/paper-loader/build.gradle.kts @@ -217,6 +217,9 @@ fun registerPaperTask( languageVersion = JavaLanguageVersion.of(javaVersion) } systemProperties["com.mojang.eula.agree"] = true + systemProperties["net.momirealms.craftengine.dev"] = true + jvmArgs("-Dsun.stdout.encoding=UTF-8") + jvmArgs("-Dsun.stderr.encoding=UTF-8") jvmArgs("-Ddisable.watchdog=true") jvmArgs("-Xlog:redefine+class*=info") jvmArgs("-XX:+AllowEnhancedClassRedefinition") diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java b/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java index 633dcba99..a412035c4 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java @@ -9,6 +9,7 @@ import java.util.Objects; public class VersionHelper { public static final boolean PREMIUM = true; + public static final boolean IS_RUNNING_IN_DEV = Boolean.getBoolean("net.momirealms.craftengine.dev"); public static final MinecraftVersion MINECRAFT_VERSION; public static final boolean COMPONENT_RELEASE; private static final int version; From b2241fc5f5dc73f56d21d270c8a4cffd7b7b9b4d Mon Sep 17 00:00:00 2001 From: jhqwqmc Date: Sun, 7 Dec 2025 15:54:31 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E6=98=AF=E5=9F=BA=E5=B2=A9=E7=89=88=E7=8E=A9?= =?UTF-8?q?=E5=AE=B6api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/plugin/user/BukkitServerPlayer.java | 10 ++++++++++ .../craftengine/core/entity/player/Player.java | 2 ++ 2 files changed, 12 insertions(+) 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 d9ebbbe69..d690465e9 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 @@ -168,6 +168,8 @@ public class BukkitServerPlayer extends Player { private int lastHitFurnitureTick; // 控制展示实体可见距离 private double displayEntityViewDistance; + // 是否是基岩版 + private Tristate isBedrock = Tristate.UNDEFINED; public BukkitServerPlayer(BukkitCraftEngine plugin, @Nullable Channel channel) { this.channel = channel; @@ -1517,6 +1519,14 @@ public class BukkitServerPlayer extends Player { return FastNMS.INSTANCE.method$Inventory$clearOrCountMatchingItems(inventory, predicate, count, craftSlots); } + @Override + public boolean isBedrock() { + if (this.isBedrock == Tristate.UNDEFINED) { + this.isBedrock = Tristate.of(this.plugin.compatibilityManager().isBedrockPlayer(this)); + } + return this.isBedrock.asBoolean(); + } + @Override public void addTrackedFurniture(int entityId, Furniture furniture) { this.trackedFurniture.put(entityId, new VirtualCullableObject(furniture)); diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/player/Player.java b/core/src/main/java/net/momirealms/craftengine/core/entity/player/Player.java index f7f85bdf5..b5814c9b4 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/player/Player.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/player/Player.java @@ -232,6 +232,8 @@ public abstract class Player extends AbstractEntity implements NetWorkUser { public abstract int clearOrCountMatchingInventoryItems(Key itemId, int count); + public abstract boolean isBedrock(); + @Override public void remove() { }