diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/LoadedFurniture.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/LoadedFurniture.java index e12c41a4c..632b581bc 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/LoadedFurniture.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/LoadedFurniture.java @@ -25,6 +25,7 @@ import org.jetbrains.annotations.Nullable; import org.joml.Quaternionf; import org.joml.Vector3f; +import java.io.IOException; import java.lang.ref.WeakReference; import java.util.*; @@ -32,7 +33,7 @@ public class LoadedFurniture implements Furniture { private final Key id; private final CustomFurniture furniture; private final AnchorType anchorType; - private final FurnitureExtraData extraData; + private FurnitureExtraData extraData; // location private final Location location; // base entity @@ -315,6 +316,21 @@ public class LoadedFurniture implements Furniture { return this.extraData; } + @Override + public void setExtraData(FurnitureExtraData extraData) { + this.extraData = extraData; + this.save(); + } + + @Override + public void save() { + try { + this.baseEntity().getPersistentDataContainer().set(BukkitFurnitureManager.FURNITURE_EXTRA_DATA_KEY, PersistentDataType.BYTE_ARRAY, this.extraData.toBytes()); + } catch (IOException e) { + CraftEngine.instance().logger().warn("Failed to save furniture data.", e); + } + } + public void spawnSeatEntityForPlayer(org.bukkit.entity.Player player, Seat seat) { Location location = this.calculateSeatLocation(seat); Entity seatEntity = seat.limitPlayerRotation() ? diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/Furniture.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/Furniture.java index 249a5872d..fea19d1e0 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/Furniture.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/Furniture.java @@ -48,4 +48,8 @@ public interface Furniture { void spawnSeatEntityForPlayer(Player player, Seat seat); FurnitureExtraData extraData(); + + void setExtraData(FurnitureExtraData extraData); + + void save(); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureExtraData.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureExtraData.java index 9ed9dad3d..940b0b0be 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureExtraData.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureExtraData.java @@ -19,6 +19,18 @@ public class FurnitureExtraData { this.data = data; } + public static FurnitureExtraData of(CompoundTag data) { + return new FurnitureExtraData(data); + } + + public CompoundTag copyTag() { + return this.data.copy(); + } + + public CompoundTag unsafeTag() { + return this.data; + } + public Optional> item() { byte[] data = this.data.getByteArray(ITEM); if (data == null) return Optional.empty();