WIP: Included target UUID in data component.

This commit is contained in:
2026-01-09 05:14:49 +01:00
parent f6e47d78e1
commit 7421a5a18d
2 changed files with 31 additions and 19 deletions

View File

@ -11,18 +11,22 @@ import java.util.Objects;
public class TotemData { public class TotemData {
public static final Codec<TotemData> CODEC = RecordCodecBuilder.create(instance -> public static final Codec<TotemData> CODEC = RecordCodecBuilder.create(instance ->
instance.group( 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) ).apply(instance, TotemData::new)
); );
public static final StreamCodec<ByteBuf, TotemData> STREAM_CODEC = StreamCodec.composite( public static final StreamCodec<ByteBuf, TotemData> STREAM_CODEC = StreamCodec.composite(
ByteBufCodecs.INT, TotemData::getTargetIndex, ByteBufCodecs.INT, TotemData::getTargetIndex,
ByteBufCodecs.STRING_UTF8, TotemData::getTargetUUID,
TotemData::new TotemData::new
); );
private int targetIndex; private int targetIndex;
private String targetUUID;
public TotemData(int targetIndex) { public TotemData(int targetIndex, String targetUUID) {
this.targetIndex = targetIndex; this.targetIndex = targetIndex;
this.targetUUID = targetUUID;
} }
public int getTargetIndex() { public int getTargetIndex() {
@ -32,9 +36,16 @@ public class TotemData {
targetIndex = newTargetIndex; targetIndex = newTargetIndex;
} }
public String getTargetUUID() {
return targetUUID;
}
public void setTargetUUID(String newTargetUUID) {
targetUUID = newTargetUUID;
}
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(this.targetIndex); return Objects.hash(this.targetIndex, this.targetUUID);
} }
@Override @Override
@ -43,7 +54,8 @@ public class TotemData {
return true; return true;
} else { } else {
return obj instanceof TotemData td return obj instanceof TotemData td
&& this.targetIndex == td.targetIndex; && this.targetIndex == td.targetIndex
&& Objects.equals(this.targetUUID, td.targetUUID);
} }
} }
} }

View File

@ -50,12 +50,9 @@ public abstract class TotemItem extends Item {
public abstract boolean isCharge(ItemStack stack); public abstract boolean isCharge(ItemStack stack);
private static Optional<TotemData> getTotemData(ItemStack stack) { @Nullable
return Optional.ofNullable(stack.getComponents().get(ModDataComponents.TOTEM_DATA.get())); public static Integer getTargetIndex(ItemStack stack) {
} return getTotemData(stack).map(TotemData::getTargetIndex).orElse(null);
public static int getTargetIndex(ItemStack stack) {
return getTotemData(stack).map(TotemData::getTargetIndex).orElse(-1);
} }
public static void setTargetIndex(ItemStack stack, int targetIndex) { public static void setTargetIndex(ItemStack stack, int targetIndex) {
Optional<TotemData> data = getTotemData(stack); Optional<TotemData> data = getTotemData(stack);
@ -64,18 +61,17 @@ public abstract class TotemItem extends Item {
data.get().setTargetIndex(targetIndex); data.get().setTargetIndex(targetIndex);
stack.set(ModDataComponents.TOTEM_DATA.get(), data.get()); stack.set(ModDataComponents.TOTEM_DATA.get(), data.get());
} }
@Nullable
public static UUID getTargetUUID(ItemStack stack) { public static UUID getTargetUUID(ItemStack stack) {
if (!isTotem(stack)) { return null; } return getTotemData(stack).map(totemData -> UUID.fromString(totemData.getTargetUUID())).orElse(null);
try {
return UUID.fromString(stack.getOrCreateTag().getString(TAG_TARGET_UUID));
} catch (IllegalArgumentException exception) {
return null;
}
} }
public static void setTargetUUID(ItemStack stack, UUID targetUUID) { public static void setTargetUUID(ItemStack stack, UUID targetUUID) {
if (!isTotem(stack)) { return; } Optional<TotemData> data = getTotemData(stack);
stack.getOrCreateTag().putString(TAG_TARGET_UUID, targetUUID.toString()); if (data.isEmpty()) { return; }
data.get().setTargetUUID(targetUUID.toString());
stack.set(ModDataComponents.TOTEM_DATA.get(), data.get());
} }
public static String getTargetName(ItemStack stack) { public static String getTargetName(ItemStack stack) {
@ -249,6 +245,10 @@ public abstract class TotemItem extends Item {
private static boolean isTotem(ItemStack stack) { private static boolean isTotem(ItemStack stack) {
return (stack.getItem() instanceof TotemItem); return (stack.getItem() instanceof TotemItem);
} }
private static Optional<TotemData> getTotemData(ItemStack stack) {
return Optional.ofNullable(stack.getComponents().get(ModDataComponents.TOTEM_DATA.get()));
}
private static Config.TotemConfig getConfig(ItemStack stack) { private static Config.TotemConfig getConfig(ItemStack stack) {
Item item = stack.getItem(); Item item = stack.getItem();