diff --git a/src/main/java/dev/micle/totemofreviving/component/TotemData.java b/src/main/java/dev/micle/totemofreviving/component/TotemData.java index a266a1e..541212b 100644 --- a/src/main/java/dev/micle/totemofreviving/component/TotemData.java +++ b/src/main/java/dev/micle/totemofreviving/component/TotemData.java @@ -11,18 +11,22 @@ import java.util.Objects; public class TotemData { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.INT.fieldOf("targetIndex").forGetter(TotemData::getTargetIndex) + Codec.INT.fieldOf("targetIndex").forGetter(TotemData::getTargetIndex), + Codec.STRING.fieldOf("targetUUID").forGetter(TotemData::getTargetUUID) ).apply(instance, TotemData::new) ); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ByteBufCodecs.INT, TotemData::getTargetIndex, + ByteBufCodecs.STRING_UTF8, TotemData::getTargetUUID, TotemData::new ); private int targetIndex; + private String targetUUID; - public TotemData(int targetIndex) { + public TotemData(int targetIndex, String targetUUID) { this.targetIndex = targetIndex; + this.targetUUID = targetUUID; } public int getTargetIndex() { @@ -32,9 +36,16 @@ public class TotemData { targetIndex = newTargetIndex; } + public String getTargetUUID() { + return targetUUID; + } + public void setTargetUUID(String newTargetUUID) { + targetUUID = newTargetUUID; + } + @Override public int hashCode() { - return Objects.hash(this.targetIndex); + return Objects.hash(this.targetIndex, this.targetUUID); } @Override @@ -43,7 +54,8 @@ public class TotemData { return true; } else { return obj instanceof TotemData td - && this.targetIndex == td.targetIndex; + && this.targetIndex == td.targetIndex + && Objects.equals(this.targetUUID, td.targetUUID); } } } diff --git a/src/main/java/dev/micle/totemofreviving/item/totem/TotemItem.java b/src/main/java/dev/micle/totemofreviving/item/totem/TotemItem.java index 4c5e70f..3f0d89f 100644 --- a/src/main/java/dev/micle/totemofreviving/item/totem/TotemItem.java +++ b/src/main/java/dev/micle/totemofreviving/item/totem/TotemItem.java @@ -50,12 +50,9 @@ public abstract class TotemItem extends Item { public abstract boolean isCharge(ItemStack stack); - private static Optional getTotemData(ItemStack stack) { - return Optional.ofNullable(stack.getComponents().get(ModDataComponents.TOTEM_DATA.get())); - } - - public static int getTargetIndex(ItemStack stack) { - return getTotemData(stack).map(TotemData::getTargetIndex).orElse(-1); + @Nullable + public static Integer getTargetIndex(ItemStack stack) { + return getTotemData(stack).map(TotemData::getTargetIndex).orElse(null); } public static void setTargetIndex(ItemStack stack, int targetIndex) { Optional data = getTotemData(stack); @@ -64,18 +61,17 @@ public abstract class TotemItem extends Item { data.get().setTargetIndex(targetIndex); stack.set(ModDataComponents.TOTEM_DATA.get(), data.get()); } - + + @Nullable public static UUID getTargetUUID(ItemStack stack) { - if (!isTotem(stack)) { return null; } - try { - return UUID.fromString(stack.getOrCreateTag().getString(TAG_TARGET_UUID)); - } catch (IllegalArgumentException exception) { - return null; - } + return getTotemData(stack).map(totemData -> UUID.fromString(totemData.getTargetUUID())).orElse(null); } public static void setTargetUUID(ItemStack stack, UUID targetUUID) { - if (!isTotem(stack)) { return; } - stack.getOrCreateTag().putString(TAG_TARGET_UUID, targetUUID.toString()); + Optional data = getTotemData(stack); + if (data.isEmpty()) { return; } + + data.get().setTargetUUID(targetUUID.toString()); + stack.set(ModDataComponents.TOTEM_DATA.get(), data.get()); } public static String getTargetName(ItemStack stack) { @@ -249,6 +245,10 @@ public abstract class TotemItem extends Item { private static boolean isTotem(ItemStack stack) { return (stack.getItem() instanceof TotemItem); } + + private static Optional getTotemData(ItemStack stack) { + return Optional.ofNullable(stack.getComponents().get(ModDataComponents.TOTEM_DATA.get())); + } private static Config.TotemConfig getConfig(ItemStack stack) { Item item = stack.getItem();