From 80d3faac6dbfd7dcdd61c593c0c9485259b14ede Mon Sep 17 00:00:00 2001 From: StarWishsama Date: Tue, 24 Dec 2024 12:15:42 +0800 Subject: [PATCH] fix(unidata): inappropriate location update (#979) --- .../storage/controller/BlockDataController.java | 2 ++ .../controller/SlimefunUniversalBlockData.java | 16 ++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/xzavier0722/mc/plugin/slimefun4/storage/controller/BlockDataController.java b/src/main/java/com/xzavier0722/mc/plugin/slimefun4/storage/controller/BlockDataController.java index 4b032fcf34..a750f0b939 100644 --- a/src/main/java/com/xzavier0722/mc/plugin/slimefun4/storage/controller/BlockDataController.java +++ b/src/main/java/com/xzavier0722/mc/plugin/slimefun4/storage/controller/BlockDataController.java @@ -250,6 +250,8 @@ public SlimefunUniversalBlockData createUniversalBlock(Location l, String sfId) uniData.setIsDataLoaded(true); + uniData.initLastPresent(); + loadedUniversalData.put(uuid, uniData); var preset = UniversalMenuPreset.getPreset(sfId); diff --git a/src/main/java/com/xzavier0722/mc/plugin/slimefun4/storage/controller/SlimefunUniversalBlockData.java b/src/main/java/com/xzavier0722/mc/plugin/slimefun4/storage/controller/SlimefunUniversalBlockData.java index 6c9463595c..2413d615ee 100644 --- a/src/main/java/com/xzavier0722/mc/plugin/slimefun4/storage/controller/SlimefunUniversalBlockData.java +++ b/src/main/java/com/xzavier0722/mc/plugin/slimefun4/storage/controller/SlimefunUniversalBlockData.java @@ -3,9 +3,7 @@ import com.xzavier0722.mc.plugin.slimefun4.storage.controller.attributes.UniversalDataTrait; import com.xzavier0722.mc.plugin.slimefun4.storage.util.LocationUtils; import io.github.bakedlibs.dough.blocks.BlockPosition; -import io.github.thebusybiscuit.slimefun4.implementation.Slimefun; import java.util.UUID; -import java.util.logging.Level; import org.bukkit.Location; public class SlimefunUniversalBlockData extends SlimefunUniversalData { @@ -19,13 +17,16 @@ public SlimefunUniversalBlockData(UUID uuid, String sfId, BlockPosition present) super(uuid, sfId); this.lastPresent = present; - setTraitData(UniversalDataTrait.BLOCK, LocationUtils.locationToString(lastPresent.toLocation())); } public SlimefunUniversalBlockData(UUID uuid, String sfId, Location present) { this(uuid, sfId, new BlockPosition(present)); } + public void initLastPresent() { + setTraitData(UniversalDataTrait.BLOCK, LocationUtils.locationToString(lastPresent.toLocation())); + } + public void setLastPresent(BlockPosition lastPresent) { setTraitData(UniversalDataTrait.BLOCK, LocationUtils.locationToString(lastPresent.toLocation())); this.lastPresent = lastPresent; @@ -36,14 +37,17 @@ public void setLastPresent(Location l) { } public BlockPosition getLastPresent() { + var data = getData(UniversalDataTrait.BLOCK.getReservedKey()); + if (lastPresent != null) { + if (data == null) { + setTraitData(UniversalDataTrait.BLOCK, LocationUtils.locationToString(lastPresent.toLocation())); + } + return lastPresent; } - var data = getData("location"); - if (data == null) { - Slimefun.logger().log(Level.WARNING, "UniversalBlockData [" + getUUID() + "] missing location data"); return null; }