WIP: Included target UUID in data component.
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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(); }
|
||||
|
||||
Reference in New Issue
Block a user