Skip to content

Commit 429b52a

Browse files
committed
chore!: save IO config as byte array instead of list
it inscrutably gets converted into a byte array when serialized to an item, so might as well use a byte array from the start
1 parent 68b6c64 commit 429b52a

File tree

4 files changed

+17
-17
lines changed

4 files changed

+17
-17
lines changed

src/main/java/dev/galacticraft/machinelib/api/block/entity/ConfiguredBlockEntity.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import net.fabricmc.fabric.api.blockview.v2.RenderDataBlockEntity;
3737
import net.minecraft.core.BlockPos;
3838
import net.minecraft.core.HolderLookup;
39+
import net.minecraft.nbt.ByteArrayTag;
3940
import net.minecraft.nbt.ByteTag;
4041
import net.minecraft.nbt.CompoundTag;
4142
import net.minecraft.nbt.Tag;
@@ -281,8 +282,8 @@ protected void saveAdditional(CompoundTag tag, HolderLookup.Provider lookup) {
281282
@Override
282283
public void loadAdditional(CompoundTag tag, HolderLookup.Provider lookup) {
283284
super.loadAdditional(tag, lookup);
284-
if (tag.contains(Constant.Nbt.CONFIGURATION, Tag.TAG_LIST))
285-
this.configuration.readTag(tag.getList(Constant.Nbt.CONFIGURATION, Tag.TAG_BYTE));
285+
if (tag.contains(Constant.Nbt.CONFIGURATION, Tag.TAG_BYTE_ARRAY))
286+
this.configuration.readTag(new ByteArrayTag(tag.getByteArray(Constant.Nbt.CONFIGURATION)));
286287
if (tag.contains(Constant.Nbt.SECURITY, Tag.TAG_COMPOUND))
287288
this.security.readTag(tag.getCompound(Constant.Nbt.SECURITY));
288289
if (tag.contains(Constant.Nbt.REDSTONE_MODE, Tag.TAG_BYTE))

src/main/java/dev/galacticraft/machinelib/api/machine/configuration/IOConfig.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,14 @@
3030
import dev.galacticraft.machinelib.api.transfer.ResourceType;
3131
import dev.galacticraft.machinelib.api.util.BlockFace;
3232
import io.netty.buffer.ByteBuf;
33-
import net.minecraft.nbt.ByteTag;
34-
import net.minecraft.nbt.ListTag;
35-
import net.minecraft.nbt.Tag;
33+
import net.minecraft.nbt.ByteArrayTag;
3634
import net.minecraft.network.codec.StreamCodec;
3735
import org.jetbrains.annotations.NotNull;
3836

3937
/**
4038
* Stores the configuration of a machine's I/O for all six faces.
4139
*/
42-
public final class IOConfig implements Serializable<ListTag>, MachineRenderData, DeltaPacketSerializable<ByteBuf, IOConfig> {
40+
public final class IOConfig implements Serializable<ByteArrayTag>, MachineRenderData, DeltaPacketSerializable<ByteBuf, IOConfig> {
4341
public static final StreamCodec<ByteBuf, IOConfig> CODEC = PacketSerializable.createCodec(IOConfig::new);
4442

4543
/**
@@ -78,19 +76,19 @@ public IOFace get(@NotNull BlockFace face) {
7876
}
7977

8078
@Override
81-
public @NotNull ListTag createTag() {
82-
ListTag nbt = new ListTag();
83-
for (IOFace face : this.faces) {
84-
nbt.add(face.createTag());
79+
public @NotNull ByteArrayTag createTag() {
80+
ByteArrayTag nbt = new ByteArrayTag(new byte[6]);
81+
for (int i = 0; i < this.faces.length; i++) {
82+
nbt.set(i, this.faces[i].createTag());
8583
}
8684
return nbt;
8785
}
8886

8987
@Override
90-
public void readTag(@NotNull ListTag tag) {
91-
if (tag.getElementType() == Tag.TAG_BYTE) {
88+
public void readTag(@NotNull ByteArrayTag tag) {
89+
if (tag.size() == 6) {
9290
for (int i = 0; i < tag.size(); i++) {
93-
this.faces[i].readTag((ByteTag) tag.get(i));
91+
this.faces[i].readTag(tag.get(i));
9492
}
9593
} else {
9694
for (IOFace face : faces) {

src/main/java/dev/galacticraft/machinelib/client/impl/model/MachineBakedModel.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import net.minecraft.core.BlockPos;
4848
import net.minecraft.core.Direction;
4949
import net.minecraft.core.component.DataComponents;
50+
import net.minecraft.nbt.ByteArrayTag;
5051
import net.minecraft.nbt.Tag;
5152
import net.minecraft.util.RandomSource;
5253
import net.minecraft.world.item.BlockItem;
@@ -194,9 +195,9 @@ public void emitItemQuads(ItemStack stack, Supplier<RandomSource> randomSupplier
194195
CustomData customData = stack.getOrDefault(DataComponents.BLOCK_ENTITY_DATA, CustomData.EMPTY);
195196

196197
IOConfig config;
197-
if (!customData.isEmpty() && customData.contains(Constant.Nbt.CONFIGURATION)) {
198+
if (!customData.isEmpty() && customData.getUnsafe().contains(Constant.Nbt.CONFIGURATION, Tag.TAG_BYTE_ARRAY)) {
198199
config = new IOConfig();
199-
config.readTag(customData.getUnsafe().getList(Constant.Nbt.CONFIGURATION, Tag.TAG_BYTE));
200+
config.readTag(new ByteArrayTag(customData.getUnsafe().getByteArray(Constant.Nbt.CONFIGURATION)));
200201
} else {
201202
config = null;
202203
}

src/test/java/dev/galacticraft/machinelib/test/misc/EmptyDeserializationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424

2525
import dev.galacticraft.machinelib.api.machine.configuration.IOConfig;
2626
import dev.galacticraft.machinelib.api.machine.configuration.SecuritySettings;
27+
import net.minecraft.nbt.ByteArrayTag;
2728
import net.minecraft.nbt.CompoundTag;
28-
import net.minecraft.nbt.ListTag;
2929
import org.junit.jupiter.api.Assertions;
3030
import org.junit.jupiter.api.Test;
3131

@@ -39,6 +39,6 @@ public void securitySettings() {
3939
@Test
4040
public void ioConfiguration() {
4141
IOConfig ioConfig = new IOConfig();
42-
Assertions.assertDoesNotThrow(() -> ioConfig.readTag(new ListTag()));
42+
Assertions.assertDoesNotThrow(() -> ioConfig.readTag(new ByteArrayTag(new byte[6])));
4343
}
4444
}

0 commit comments

Comments
 (0)