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