diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/entity/EntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/entity/EntityMixin.java index d4759174..6e197cf2 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/entity/EntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/entity/EntityMixin.java @@ -11,6 +11,7 @@ import io.izzel.arclight.common.bridge.core.entity.player.ServerPlayerEntityBrid import io.izzel.arclight.common.bridge.core.network.datasync.EntityDataManagerBridge; import io.izzel.arclight.common.bridge.core.world.TeleporterBridge; import io.izzel.arclight.common.bridge.core.world.WorldBridge; +import io.izzel.arclight.common.mod.server.BukkitRegistry; import io.izzel.arclight.common.mod.util.ArclightCaptures; import net.minecraft.BlockUtil; import net.minecraft.commands.CommandSourceStack; @@ -290,7 +291,7 @@ public abstract class EntityMixin implements InternalEntityBridge, EntityBridge, callbackInfo.cancel(); return; } - EntityPoseChangeEvent event = new EntityPoseChangeEvent(this.internal$getBukkitEntity(), org.bukkit.entity.Pose.values()[poseIn.ordinal()]); + EntityPoseChangeEvent event = new EntityPoseChangeEvent(this.internal$getBukkitEntity(), BukkitRegistry.toBukkitPose(poseIn)); Bukkit.getPluginManager().callEvent(event); } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mod/server/BukkitRegistry.java b/arclight-common/src/main/java/io/izzel/arclight/common/mod/server/BukkitRegistry.java index edca5069..5cbb04e9 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mod/server/BukkitRegistry.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mod/server/BukkitRegistry.java @@ -56,6 +56,7 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.EnderDragon; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Pose; import org.bukkit.entity.SpawnCategory; import org.bukkit.entity.Villager; import org.bukkit.inventory.CreativeCategory; @@ -119,6 +120,21 @@ public class BukkitRegistry { } } + public static Pose toBukkitPose(net.minecraft.world.entity.Pose nms) { + if (Pose.values().length <= nms.ordinal()) { + var newTypes = new ArrayList(); + var forgeCount = net.minecraft.world.entity.Pose.values().length; + for (var id = Pose.values().length; id < forgeCount; id++) { + var name = net.minecraft.world.entity.Pose.values()[id].name(); + var newPhase = EnumHelper.makeEnum(Pose.class, name, id, List.of(), List.of()); + newTypes.add(newPhase); + ArclightMod.LOGGER.debug("Registered {} as pose {}", name, newPhase); + } + EnumHelper.addEnums(Pose.class, newTypes); + } + return org.bukkit.entity.Pose.values()[nms.ordinal()]; + } + private static void loadEndDragonPhase() { var max = EnderDragonPhase.getCount(); var newTypes = new ArrayList();