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 static final Codec<TotemData> 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<ByteBuf, TotemData> 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);
}
}
}

View File

@ -50,12 +50,9 @@ public abstract class TotemItem extends Item {
public abstract boolean isCharge(ItemStack stack);
private static Optional<TotemData> 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<TotemData> data = getTotemData(stack);
@ -65,17 +62,16 @@ public abstract class TotemItem extends Item {
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<TotemData> 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) {
@ -250,6 +246,10 @@ public abstract class TotemItem extends Item {
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) {
Item item = stack.getItem();
if (item instanceof StrawTotemItem) { return Config.Server.getStrawTotemConfig(); }