From 9fe536439bd9f5ea975c5dfcd1f9f014391e7091 Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Tue, 25 Nov 2025 17:06:50 +0100 Subject: [PATCH] mark all entities spawn by the plugin and allow other plugins to check for that --- .../converter/ArmorStandToMannequinConverter.java | 3 ++- .../standin/converter/EntityConverter.java | 6 ++++++ .../converter/MannequinToArmorStandConverter.java | 1 + .../youhavetrouble/standin/entity/EntityHandler.java | 10 ++++++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/youhavetrouble/standin/converter/ArmorStandToMannequinConverter.java b/src/main/java/me/youhavetrouble/standin/converter/ArmorStandToMannequinConverter.java index 9e8b528..34c0dcb 100644 --- a/src/main/java/me/youhavetrouble/standin/converter/ArmorStandToMannequinConverter.java +++ b/src/main/java/me/youhavetrouble/standin/converter/ArmorStandToMannequinConverter.java @@ -27,8 +27,9 @@ public class ArmorStandToMannequinConverter implements EntityConverter { - mannequin.customName(from.customName()); + markAsTransformed(mannequin); EntityConverter.saveRawEntityName(mannequin, EntityConverter.getRawEntityName(from)); + mannequin.customName(from.customName()); mannequin.setImmovable(!from.canMove()); mannequin.setGravity(from.hasGravity()); for (EquipmentSlot slot : EquipmentSlot.values()) { diff --git a/src/main/java/me/youhavetrouble/standin/converter/EntityConverter.java b/src/main/java/me/youhavetrouble/standin/converter/EntityConverter.java index e802990..6390cda 100644 --- a/src/main/java/me/youhavetrouble/standin/converter/EntityConverter.java +++ b/src/main/java/me/youhavetrouble/standin/converter/EntityConverter.java @@ -1,5 +1,6 @@ package me.youhavetrouble.standin.converter; +import me.youhavetrouble.standin.StandIn; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.NamespacedKey; @@ -26,6 +27,11 @@ public interface EntityConverter { */ T spawn(@NotNull F from); + default void markAsTransformed(@NotNull T entity) { + PersistentDataContainer pdc = entity.getPersistentDataContainer(); + pdc.set(StandIn.KEY, PersistentDataType.BYTE, (byte) 1); + } + /** * MiniMessage serialized entity name * @param entity Entity to get name for diff --git a/src/main/java/me/youhavetrouble/standin/converter/MannequinToArmorStandConverter.java b/src/main/java/me/youhavetrouble/standin/converter/MannequinToArmorStandConverter.java index d34b2c6..f822984 100644 --- a/src/main/java/me/youhavetrouble/standin/converter/MannequinToArmorStandConverter.java +++ b/src/main/java/me/youhavetrouble/standin/converter/MannequinToArmorStandConverter.java @@ -26,6 +26,7 @@ public class MannequinToArmorStandConverter implements EntityConverter { + markAsTransformed(armorStand); armorStand.customName(from.customName()); EntityConverter.saveRawEntityName(armorStand, EntityConverter.getRawEntityName(from)); armorStand.setGravity(from.hasGravity()); diff --git a/src/main/java/me/youhavetrouble/standin/entity/EntityHandler.java b/src/main/java/me/youhavetrouble/standin/entity/EntityHandler.java index 749cb96..3cf0621 100644 --- a/src/main/java/me/youhavetrouble/standin/entity/EntityHandler.java +++ b/src/main/java/me/youhavetrouble/standin/entity/EntityHandler.java @@ -8,6 +8,7 @@ import io.papermc.paper.registry.data.dialog.body.DialogBody; import io.papermc.paper.registry.data.dialog.input.DialogInput; import io.papermc.paper.registry.data.dialog.input.SingleOptionDialogInput; import io.papermc.paper.registry.data.dialog.type.DialogType; +import me.youhavetrouble.standin.StandIn; import me.youhavetrouble.standin.converter.EntityConverter; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.ClickCallback; @@ -172,4 +173,13 @@ public abstract class EntityHandler { CHANGE_TYPE, } + /** + * Checks if entity is entity transformed by stand-in plugin + * @param entity entity to check + * @return boolean representing whether entity is a stand-in entity + */ + public static boolean isStandinEntity(@NotNull Entity entity) { + return entity.getPersistentDataContainer().has(StandIn.KEY); + } + }