From 7d919e5d8e68fadf20c4a715d957cc1e6b64697d Mon Sep 17 00:00:00 2001 From: KrLite <68179735+KrLite@users.noreply.github.com> Date: Sun, 10 Mar 2024 10:46:16 +0800 Subject: [PATCH] protocols --- .../knowledges/api/tag/TagProtocol.java | 4 ++- .../api/tag/caster/NbtByteArrayCaster.java | 4 +-- .../knowledges/api/tag/caster/NbtCaster.java | 2 +- .../api/tag/caster/NbtIntArrayCaster.java | 4 +-- .../api/tag/caster/NbtLongArrayCaster.java | 4 +-- .../BeehiveBlockInformationData.java | 33 ++++++++----------- .../impl/tag/block/BeehiveAdditionalTag.java | 24 ++++++++++++-- 7 files changed, 46 insertions(+), 29 deletions(-) diff --git a/src/main/java/net/krlite/knowledges/api/tag/TagProtocol.java b/src/main/java/net/krlite/knowledges/api/tag/TagProtocol.java index 5ba20ab..0bc30ff 100644 --- a/src/main/java/net/krlite/knowledges/api/tag/TagProtocol.java +++ b/src/main/java/net/krlite/knowledges/api/tag/TagProtocol.java @@ -1,5 +1,7 @@ package net.krlite.knowledges.api.tag; -public interface TagProtocol, E extends Enum & TagProtocol> { +import net.krlite.knowledges.api.tag.caster.NbtCaster; +public interface TagProtocol, E extends Enum & TagProtocol> { + NbtCaster caster(); } diff --git a/src/main/java/net/krlite/knowledges/api/tag/caster/NbtByteArrayCaster.java b/src/main/java/net/krlite/knowledges/api/tag/caster/NbtByteArrayCaster.java index 83aab50..5f8168b 100644 --- a/src/main/java/net/krlite/knowledges/api/tag/caster/NbtByteArrayCaster.java +++ b/src/main/java/net/krlite/knowledges/api/tag/caster/NbtByteArrayCaster.java @@ -14,7 +14,7 @@ public NbtByteArrayCaster(String identifier) { ); } - public void set(NbtCompound data, byte[] bytes) { - super.set(data, Bytes.asList(bytes)); + public void put(NbtCompound data, byte[] bytes) { + super.put(data, Bytes.asList(bytes)); } } diff --git a/src/main/java/net/krlite/knowledges/api/tag/caster/NbtCaster.java b/src/main/java/net/krlite/knowledges/api/tag/caster/NbtCaster.java index 33dd1db..48a7f13 100644 --- a/src/main/java/net/krlite/knowledges/api/tag/caster/NbtCaster.java +++ b/src/main/java/net/krlite/knowledges/api/tag/caster/NbtCaster.java @@ -37,7 +37,7 @@ public Optional get(NbtCompound data) { return Optional.ofNullable(hasValueIn(data) ? fromData.get(data, identifier) : null); } - public void set(NbtCompound data, T t) { + public void put(NbtCompound data, T t) { toData.set(data, identifier, t); } } diff --git a/src/main/java/net/krlite/knowledges/api/tag/caster/NbtIntArrayCaster.java b/src/main/java/net/krlite/knowledges/api/tag/caster/NbtIntArrayCaster.java index 85c4a0d..77295ea 100644 --- a/src/main/java/net/krlite/knowledges/api/tag/caster/NbtIntArrayCaster.java +++ b/src/main/java/net/krlite/knowledges/api/tag/caster/NbtIntArrayCaster.java @@ -14,7 +14,7 @@ public NbtIntArrayCaster(String identifier) { ); } - public void set(NbtCompound data, int[] integers) { - super.set(data, Arrays.stream(integers).boxed().toList()); + public void put(NbtCompound data, int[] integers) { + super.put(data, Arrays.stream(integers).boxed().toList()); } } diff --git a/src/main/java/net/krlite/knowledges/api/tag/caster/NbtLongArrayCaster.java b/src/main/java/net/krlite/knowledges/api/tag/caster/NbtLongArrayCaster.java index de6204a..2cf45f9 100644 --- a/src/main/java/net/krlite/knowledges/api/tag/caster/NbtLongArrayCaster.java +++ b/src/main/java/net/krlite/knowledges/api/tag/caster/NbtLongArrayCaster.java @@ -14,7 +14,7 @@ public NbtLongArrayCaster(String identifier) { ); } - public void set(NbtCompound data, long[] longs) { - super.set(data, Arrays.stream(longs).boxed().toList()); + public void put(NbtCompound data, long[] longs) { + super.put(data, Arrays.stream(longs).boxed().toList()); } } diff --git a/src/main/java/net/krlite/knowledges/impl/data/info/block/blockinformation/BeehiveBlockInformationData.java b/src/main/java/net/krlite/knowledges/impl/data/info/block/blockinformation/BeehiveBlockInformationData.java index 387b728..46fffd5 100644 --- a/src/main/java/net/krlite/knowledges/impl/data/info/block/blockinformation/BeehiveBlockInformationData.java +++ b/src/main/java/net/krlite/knowledges/impl/data/info/block/blockinformation/BeehiveBlockInformationData.java @@ -1,24 +1,23 @@ package net.krlite.knowledges.impl.data.info.block.blockinformation; import net.krlite.knowledges.Shortcuts; -import net.krlite.knowledges.api.component.Knowledge; import net.krlite.knowledges.api.proxy.KnowledgeProxy; import net.krlite.knowledges.api.representable.BlockRepresentable; +import net.krlite.knowledges.api.tag.caster.NbtBooleanCaster; +import net.krlite.knowledges.api.tag.caster.NbtByteCaster; import net.krlite.knowledges.impl.data.info.block.AbstractBlockInformationData; +import net.krlite.knowledges.impl.tag.block.BeehiveAdditionalTag; import net.minecraft.block.BeehiveBlock; -import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.entity.BeehiveBlockEntity; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.NbtCompound; -import net.minecraft.registry.Registries; -import net.minecraft.registry.tag.BlockTags; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; import java.util.Optional; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Predicate; public class BeehiveBlockInformationData extends AbstractBlockInformationData { @Override @@ -26,7 +25,6 @@ public Optional blockInformation(BlockRepresentable representable) return representable.blockEntity().flatMap(blockEntity -> { if (blockEntity instanceof BeehiveBlockEntity) { NbtCompound data = representable.data(); - System.out.println(data); int honeyLevel = representable.blockState().get(BeehiveBlock.HONEY_LEVEL), fullHoneyLevel = BeehiveBlock.FULL_HONEY_LEVEL; MutableText honeyLevelText = Text.translatable( @@ -34,21 +32,18 @@ public Optional blockInformation(BlockRepresentable representable) honeyLevel, fullHoneyLevel ); - MutableText beeCountText = Text.empty(); - if (data.contains("Bees")) { - byte beeCount = data.getByte("Bees"); - beeCountText = beeCount == 0 ? localize("bee_count", "empty") : Text.translatable( + final AtomicReference beeCountText = new AtomicReference<>(Text.empty()); + ((NbtByteCaster) BeehiveAdditionalTag.Protocol.BEES_BYTE.caster()).get(data).ifPresent(beeCount -> { + beeCountText.set(beeCount == 0 ? localize("bee_count", "empty") : Text.translatable( localizationKey("bee_count"), beeCount - ); - } + )); + }); + ((NbtBooleanCaster) BeehiveAdditionalTag.Protocol.FULL_BOOLEAN.caster()).get(data).ifPresent(full -> { + if (full) beeCountText.set(localize("bee_count", "full")); + }); - if (data.contains("Full")) { - boolean isFull = data.getBoolean("Full"); - if (isFull) beeCountText = localize("bee_count", "full"); - } - - return Shortcuts.Text.combineToMultiline(honeyLevelText, beeCountText); + return Shortcuts.Text.combineToMultiline(honeyLevelText, beeCountText.get()); } return Optional.empty(); diff --git a/src/main/java/net/krlite/knowledges/impl/tag/block/BeehiveAdditionalTag.java b/src/main/java/net/krlite/knowledges/impl/tag/block/BeehiveAdditionalTag.java index b0d2a0c..5bc3bba 100644 --- a/src/main/java/net/krlite/knowledges/impl/tag/block/BeehiveAdditionalTag.java +++ b/src/main/java/net/krlite/knowledges/impl/tag/block/BeehiveAdditionalTag.java @@ -3,6 +3,10 @@ import net.krlite.knowledges.api.proxy.KnowledgeProxy; import net.krlite.knowledges.api.representable.BlockRepresentable; import net.krlite.knowledges.api.tag.AdditionalBlockTag; +import net.krlite.knowledges.api.tag.TagProtocol; +import net.krlite.knowledges.api.tag.caster.NbtBooleanCaster; +import net.krlite.knowledges.api.tag.caster.NbtByteCaster; +import net.krlite.knowledges.api.tag.caster.NbtCaster; import net.minecraft.block.BeehiveBlock; import net.minecraft.block.Block; import net.minecraft.block.Blocks; @@ -11,6 +15,22 @@ import org.jetbrains.annotations.NotNull; public class BeehiveAdditionalTag implements AdditionalBlockTag { + public enum Protocol implements TagProtocol { + BEES_BYTE(new NbtByteCaster("Bees")), + FULL_BOOLEAN(new NbtBooleanCaster("Full")); + + private final NbtCaster caster; + + Protocol(NbtCaster caster) { + this.caster = caster; + } + + @Override + public NbtCaster caster() { + return caster; + } + } + @Override public boolean shouldApply(Block block) { System.out.println(block); @@ -21,8 +41,8 @@ public boolean shouldApply(Block block) { public void append(NbtCompound data, BlockRepresentable representable) { representable.blockEntity().ifPresent(blockEntity -> { if (blockEntity instanceof BeehiveBlockEntity beehiveBlockEntity) { - data.putByte("Bees", (byte) beehiveBlockEntity.getBeeCount()); - data.putBoolean("Full", beehiveBlockEntity.isFullOfBees()); + ((NbtByteCaster) Protocol.BEES_BYTE.caster()).put(data, (byte) beehiveBlockEntity.getBeeCount()); + ((NbtBooleanCaster) Protocol.FULL_BOOLEAN.caster()).put(data, beehiveBlockEntity.isFullOfBees()); } }); }