mark all entities spawn by the plugin and allow other plugins to check for that

This commit is contained in:
2025-11-25 17:06:50 +01:00
parent ed7653aa66
commit 9fe536439b
4 changed files with 19 additions and 1 deletions
@@ -27,8 +27,9 @@ public class ArmorStandToMannequinConverter implements EntityConverter<ArmorStan
public Mannequin spawn(@NotNull ArmorStand from) { public Mannequin spawn(@NotNull ArmorStand from) {
try { try {
return from.getWorld().spawn(from.getLocation(), Mannequin.class, (mannequin -> { return from.getWorld().spawn(from.getLocation(), Mannequin.class, (mannequin -> {
mannequin.customName(from.customName()); markAsTransformed(mannequin);
EntityConverter.saveRawEntityName(mannequin, EntityConverter.getRawEntityName(from)); EntityConverter.saveRawEntityName(mannequin, EntityConverter.getRawEntityName(from));
mannequin.customName(from.customName());
mannequin.setImmovable(!from.canMove()); mannequin.setImmovable(!from.canMove());
mannequin.setGravity(from.hasGravity()); mannequin.setGravity(from.hasGravity());
for (EquipmentSlot slot : EquipmentSlot.values()) { for (EquipmentSlot slot : EquipmentSlot.values()) {
@@ -1,5 +1,6 @@
package me.youhavetrouble.standin.converter; package me.youhavetrouble.standin.converter;
import me.youhavetrouble.standin.StandIn;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
@@ -26,6 +27,11 @@ public interface EntityConverter<F extends Entity, T extends Entity> {
*/ */
T spawn(@NotNull F from); 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 * MiniMessage serialized entity name
* @param entity Entity to get name for * @param entity Entity to get name for
@@ -26,6 +26,7 @@ public class MannequinToArmorStandConverter implements EntityConverter<Mannequin
public ArmorStand spawn(@NotNull Mannequin from) { public ArmorStand spawn(@NotNull Mannequin from) {
try { try {
return from.getWorld().spawn(from.getLocation(), ArmorStand.class, (armorStand -> { return from.getWorld().spawn(from.getLocation(), ArmorStand.class, (armorStand -> {
markAsTransformed(armorStand);
armorStand.customName(from.customName()); armorStand.customName(from.customName());
EntityConverter.saveRawEntityName(armorStand, EntityConverter.getRawEntityName(from)); EntityConverter.saveRawEntityName(armorStand, EntityConverter.getRawEntityName(from));
armorStand.setGravity(from.hasGravity()); armorStand.setGravity(from.hasGravity());
@@ -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.DialogInput;
import io.papermc.paper.registry.data.dialog.input.SingleOptionDialogInput; import io.papermc.paper.registry.data.dialog.input.SingleOptionDialogInput;
import io.papermc.paper.registry.data.dialog.type.DialogType; import io.papermc.paper.registry.data.dialog.type.DialogType;
import me.youhavetrouble.standin.StandIn;
import me.youhavetrouble.standin.converter.EntityConverter; import me.youhavetrouble.standin.converter.EntityConverter;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickCallback; import net.kyori.adventure.text.event.ClickCallback;
@@ -172,4 +173,13 @@ public abstract class EntityHandler<E extends Entity> {
CHANGE_TYPE, 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);
}
} }