mirror of
https://github.com/YouHaveTrouble/Stand-in.git
synced 2026-05-11 22:16:55 +00:00
cleanup and make mannequin profile name persistent when converting to and from armor stand
This commit is contained in:
+20
-13
@@ -1,48 +1,55 @@
|
||||
package me.youhavetrouble.standin.converter;
|
||||
|
||||
import io.papermc.paper.datacomponent.item.ResolvableProfile;
|
||||
import me.youhavetrouble.standin.StandIn;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Mannequin;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.persistence.PersistentDataContainer;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
public class ArmorStandToMannequinConverter implements EntityConverter<ArmorStand, Mannequin> {
|
||||
|
||||
@Override
|
||||
public Class<ArmorStand> entityFrom() {
|
||||
return ArmorStand.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<Mannequin> entityTo() {
|
||||
return Mannequin.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull EntityType entityFromType() {
|
||||
public @NotNull EntityType entityFrom() {
|
||||
return EntityType.ARMOR_STAND;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull EntityType entityToType() {
|
||||
public @NotNull EntityType entityTo() {
|
||||
return EntityType.MANNEQUIN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mannequin spawn(@NotNull ArmorStand from) {
|
||||
try {
|
||||
return from.getWorld().spawn(from.getLocation(), entityTo(), (mannequin -> {
|
||||
return from.getWorld().spawn(from.getLocation(), Mannequin.class, (mannequin -> {
|
||||
mannequin.customName(from.customName());
|
||||
mannequin.setImmovable(!from.canMove());
|
||||
mannequin.setGravity(from.hasGravity());
|
||||
for (EquipmentSlot slot : EquipmentSlot.values()) {
|
||||
try {
|
||||
mannequin.getEquipment().setItem(slot, from.getItem(slot));
|
||||
} catch (IllegalArgumentException ignored) {
|
||||
}
|
||||
}
|
||||
PersistentDataContainer pdc = from.getPersistentDataContainer();
|
||||
String profileName = pdc.get(EntityConverter.PLAYER_PROFILE_KEY, PersistentDataType.STRING);
|
||||
if (profileName != null) {
|
||||
try {
|
||||
mannequin.setProfile(ResolvableProfile.resolvableProfile().name(profileName).build());
|
||||
} catch (IllegalArgumentException e) {
|
||||
StandIn.getPlugin(StandIn.class).getSLF4JLogger().warn("Failed to set profile for mannequin", e);
|
||||
}
|
||||
}
|
||||
}));
|
||||
} catch (IllegalArgumentException e) {
|
||||
StandIn.getPlugin(StandIn.class).getSLF4JLogger().warn("Failed to spawn entity", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user