Skip to content

Commit 5a342c9

Browse files
committed
Move frequencies to codecs and stream codecs
1 parent e052d61 commit 5a342c9

25 files changed

+369
-417
lines changed

src/additions/java/mekanism/additions/common/entity/EntityBalloon.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -306,27 +306,27 @@ public boolean skipAttackInteraction(@NotNull Entity entity) {
306306
}
307307

308308
@Override
309-
public void writeSpawnData(RegistryFriendlyByteBuf data) {
310-
data.writeEnum(color);
309+
public void writeSpawnData(RegistryFriendlyByteBuf buffer) {
310+
buffer.writeEnum(color);
311311
if (latched != null) {
312-
data.writeByte((byte) 1);
313-
data.writeBlockPos(latched);
312+
buffer.writeByte((byte) 1);
313+
buffer.writeBlockPos(latched);
314314
} else if (latchedEntity != null) {
315-
data.writeByte((byte) 2);
316-
data.writeVarInt(latchedEntity.getId());
315+
buffer.writeByte((byte) 2);
316+
buffer.writeVarInt(latchedEntity.getId());
317317
} else {
318-
data.writeByte((byte) 0);
318+
buffer.writeByte((byte) 0);
319319
}
320320
}
321321

322322
@Override
323-
public void readSpawnData(RegistryFriendlyByteBuf data) {
324-
color = data.readEnum(EnumColor.class);
325-
byte type = data.readByte();
323+
public void readSpawnData(RegistryFriendlyByteBuf buffer) {
324+
color = buffer.readEnum(EnumColor.class);
325+
byte type = buffer.readByte();
326326
if (type == 1) {
327-
latched = data.readBlockPos();
327+
latched = buffer.readBlockPos();
328328
} else if (type == 2) {
329-
latchedEntity = (LivingEntity) level().getEntity(data.readVarInt());
329+
latchedEntity = (LivingEntity) level().getEntity(buffer.readVarInt());
330330
} else {
331331
latched = null;
332332
}

src/api/java/mekanism/api/chemical/Chemical.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,20 +73,20 @@ public abstract class Chemical<CHEMICAL extends Chemical<CHEMICAL>> implements I
7373
*/
7474
public static final StreamCodec<RegistryFriendlyByteBuf, Chemical<?>> BOXED_STREAM_CODEC = new StreamCodec<>() {
7575
@Override
76-
public Chemical<?> decode(RegistryFriendlyByteBuf buf) {
77-
Chemical<?> chemical = BOXED_OPTIONAL_STREAM_CODEC.decode(buf);
76+
public Chemical<?> decode(RegistryFriendlyByteBuf buffer) {
77+
Chemical<?> chemical = BOXED_OPTIONAL_STREAM_CODEC.decode(buffer);
7878
if (chemical.isEmptyType()) {
7979
throw new DecoderException("Empty Chemicals are not allowed");
8080
}
8181
return chemical;
8282
}
8383

8484
@Override
85-
public void encode(RegistryFriendlyByteBuf buf, Chemical<?> chemical) {
85+
public void encode(RegistryFriendlyByteBuf buffer, Chemical<?> chemical) {
8686
if (chemical.isEmptyType()) {
8787
throw new EncoderException("Empty Chemicals are not allowed");
8888
}
89-
BOXED_OPTIONAL_STREAM_CODEC.encode(buf, chemical);
89+
BOXED_OPTIONAL_STREAM_CODEC.encode(buffer, chemical);
9090
}
9191
};
9292

src/api/java/mekanism/api/chemical/ChemicalStack.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -102,20 +102,20 @@ protected static <CHEMICAL extends Chemical<CHEMICAL>, STACK extends ChemicalSta
102102
StreamCodec<RegistryFriendlyByteBuf, CHEMICAL> chemicalStreamCodec = ByteBufCodecs.registry(registry);
103103
return new StreamCodec<>() {
104104
@Override
105-
public STACK decode(RegistryFriendlyByteBuf buf) {
106-
long amount = buf.readVarLong();
105+
public STACK decode(RegistryFriendlyByteBuf buffer) {
106+
long amount = buffer.readVarLong();
107107
if (amount <= 0) {
108108
return empty;
109109
}
110-
CHEMICAL chemical = chemicalStreamCodec.decode(buf);
110+
CHEMICAL chemical = chemicalStreamCodec.decode(buffer);
111111
return constructor.apply(chemical, amount);
112112
}
113113

114114
@Override
115-
public void encode(RegistryFriendlyByteBuf buf, STACK stack) {
116-
buf.writeVarLong(stack.getAmount());
115+
public void encode(RegistryFriendlyByteBuf buffer, STACK stack) {
116+
buffer.writeVarLong(stack.getAmount());
117117
if (!stack.isEmpty()) {
118-
chemicalStreamCodec.encode(buf, stack.getChemical());
118+
chemicalStreamCodec.encode(buffer, stack.getChemical());
119119
}
120120
}
121121
};
@@ -130,20 +130,20 @@ protected static <CHEMICAL extends Chemical<CHEMICAL>, STACK extends ChemicalSta
130130
StreamCodec<RegistryFriendlyByteBuf, STACK> optionalStreamCodec) {
131131
return new StreamCodec<>() {
132132
@Override
133-
public STACK decode(RegistryFriendlyByteBuf buf) {
134-
STACK stack = optionalStreamCodec.decode(buf);
133+
public STACK decode(RegistryFriendlyByteBuf buffer) {
134+
STACK stack = optionalStreamCodec.decode(buffer);
135135
if (stack.isEmpty()) {
136136
throw new DecoderException("Empty ChemicalStack not allowed");
137137
}
138138
return stack;
139139
}
140140

141141
@Override
142-
public void encode(RegistryFriendlyByteBuf buf, STACK stack) {
142+
public void encode(RegistryFriendlyByteBuf buffer, STACK stack) {
143143
if (stack.isEmpty()) {
144144
throw new EncoderException("Empty ChemicalStack not allowed");
145145
}
146-
optionalStreamCodec.encode(buf, stack);
146+
optionalStreamCodec.encode(buffer, stack);
147147
}
148148
};
149149
}

src/main/java/mekanism/common/content/entangloporter/InventoryFrequency.java

Lines changed: 65 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package mekanism.common.content.entangloporter;
22

3+
import com.mojang.serialization.Codec;
4+
import com.mojang.serialization.codecs.RecordCodecBuilder;
35
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
46
import java.util.ArrayList;
57
import java.util.Collections;
68
import java.util.EnumMap;
79
import java.util.List;
810
import java.util.Map;
11+
import java.util.Optional;
912
import java.util.UUID;
1013
import java.util.function.Consumer;
14+
import java.util.function.Function;
1115
import mekanism.api.Action;
1216
import mekanism.api.AutomationType;
1317
import mekanism.api.NBTConstants;
@@ -35,6 +39,7 @@
3539
import mekanism.api.inventory.IInventorySlot;
3640
import mekanism.api.inventory.IMekanismInventory;
3741
import mekanism.api.math.FloatingLong;
42+
import mekanism.api.security.SecurityMode;
3843
import mekanism.common.capabilities.chemical.dynamic.IGasTracker;
3944
import mekanism.common.capabilities.chemical.dynamic.IInfusionTracker;
4045
import mekanism.common.capabilities.chemical.dynamic.IPigmentTracker;
@@ -47,10 +52,12 @@
4752
import mekanism.common.content.network.distribution.ChemicalHandlerTarget;
4853
import mekanism.common.content.network.distribution.EnergyAcceptorTarget;
4954
import mekanism.common.content.network.distribution.FluidHandlerTarget;
55+
import mekanism.common.inventory.slot.BasicInventorySlot;
5056
import mekanism.common.inventory.slot.EntangloporterInventorySlot;
5157
import mekanism.common.lib.frequency.Frequency;
5258
import mekanism.common.lib.frequency.FrequencyType;
5359
import mekanism.common.lib.transmitter.TransmissionType;
60+
import mekanism.common.network.PacketUtils;
5461
import mekanism.common.tile.TileEntityQuantumEntangloporter;
5562
import mekanism.common.tile.component.config.ConfigInfo;
5663
import mekanism.common.tile.component.config.DataType;
@@ -60,10 +67,12 @@
6067
import mekanism.common.util.FluidUtils;
6168
import net.minecraft.core.Direction;
6269
import net.minecraft.core.GlobalPos;
63-
import net.minecraft.core.HolderLookup;
64-
import net.minecraft.nbt.CompoundTag;
70+
import net.minecraft.core.UUIDUtil;
6571
import net.minecraft.network.RegistryFriendlyByteBuf;
72+
import net.minecraft.network.codec.ByteBufCodecs;
73+
import net.minecraft.network.codec.StreamCodec;
6674
import net.minecraft.server.level.ServerLevel;
75+
import net.minecraft.util.ExtraCodecs;
6776
import net.minecraft.world.item.ItemStack;
6877
import net.minecraft.world.level.ChunkPos;
6978
import net.minecraft.world.level.block.entity.BlockEntity;
@@ -75,6 +84,55 @@
7584
public class InventoryFrequency extends Frequency implements IMekanismInventory, IMekanismFluidHandler, IMekanismStrictEnergyHandler, ITileHeatHandler, IGasTracker,
7685
IInfusionTracker, IPigmentTracker, ISlurryTracker {
7786

87+
public static final Codec<InventoryFrequency> CODEC = RecordCodecBuilder.create(instance -> instance.group(
88+
ExtraCodecs.NON_EMPTY_STRING.fieldOf(NBTConstants.NAME).forGetter(Frequency::getName),
89+
UUIDUtil.CODEC.optionalFieldOf(NBTConstants.OWNER_UUID).forGetter(freq -> Optional.ofNullable(freq.getOwner())),
90+
SecurityMode.CODEC.fieldOf(NBTConstants.SECURITY_MODE).forGetter(Frequency::getSecurity),
91+
FloatingLong.CODEC.fieldOf(NBTConstants.ENERGY_STORED).forGetter(freq -> freq.storedEnergy.getEnergy()),
92+
FluidStack.OPTIONAL_CODEC.fieldOf(NBTConstants.FLUID_STORED).forGetter(freq -> freq.storedFluid.getFluid()),
93+
GasStack.OPTIONAL_CODEC.fieldOf(NBTConstants.GAS_STORED).forGetter(freq -> freq.storedGas.getStack()),
94+
InfusionStack.OPTIONAL_CODEC.fieldOf(NBTConstants.INFUSE_TYPE_STORED).forGetter(freq -> freq.storedInfusion.getStack()),
95+
PigmentStack.OPTIONAL_CODEC.fieldOf(NBTConstants.PIGMENT_STORED).forGetter(freq -> freq.storedPigment.getStack()),
96+
SlurryStack.OPTIONAL_CODEC.fieldOf(NBTConstants.SLURRY_STORED).forGetter(freq -> freq.storedSlurry.getStack()),
97+
ItemStack.OPTIONAL_CODEC.fieldOf(NBTConstants.ITEM).forGetter(freq -> freq.storedItem.getStack()),
98+
Codec.DOUBLE.fieldOf(NBTConstants.HEAT_STORED).forGetter(freq -> freq.storedHeat.getHeat()),
99+
Codec.DOUBLE.fieldOf(NBTConstants.HEAT_CAPACITY).forGetter(freq -> freq.storedHeat.getHeatCapacity())
100+
).apply(instance, (name, owner, securityMode, energy, fluid, gas, infusion, pigment, slurry, item, heat, heatCapacity) -> {
101+
InventoryFrequency frequency = new InventoryFrequency(name, owner.orElse(null), securityMode);
102+
frequency.storedEnergy.setEnergy(energy);
103+
frequency.storedFluid.setStackUnchecked(fluid);
104+
frequency.storedGas.setStackUnchecked(gas);
105+
frequency.storedInfusion.setStackUnchecked(infusion);
106+
frequency.storedPigment.setStackUnchecked(pigment);
107+
frequency.storedSlurry.setStackUnchecked(slurry);
108+
frequency.storedItem.setStackUnchecked(item);
109+
frequency.storedHeat.setHeat(heat);
110+
frequency.storedHeat.setHeatCapacity(heatCapacity, false);
111+
return frequency;
112+
}));
113+
public static final StreamCodec<RegistryFriendlyByteBuf, InventoryFrequency> STREAM_CODEC = PacketUtils.composite(
114+
baseStreamCodec(InventoryFrequency::new), Function.identity(),
115+
FloatingLong.STREAM_CODEC, freq -> freq.storedEnergy.getEnergy(),
116+
FluidStack.OPTIONAL_STREAM_CODEC, freq -> freq.storedFluid.getFluid(),
117+
GasStack.OPTIONAL_STREAM_CODEC, freq -> freq.storedGas.getStack(),
118+
InfusionStack.OPTIONAL_STREAM_CODEC, freq -> freq.storedInfusion.getStack(),
119+
PigmentStack.OPTIONAL_STREAM_CODEC, freq -> freq.storedPigment.getStack(),
120+
SlurryStack.OPTIONAL_STREAM_CODEC, freq -> freq.storedSlurry.getStack(),
121+
ItemStack.OPTIONAL_STREAM_CODEC, freq -> freq.storedItem.getStack(),
122+
ByteBufCodecs.DOUBLE, freq -> freq.storedHeat.getHeat(),
123+
(frequency, energy, fluid, gas, infusion, pigment, slurry, item, heat) -> {
124+
frequency.storedEnergy.setEnergy(energy);
125+
frequency.storedFluid.setStack(fluid);
126+
frequency.storedGas.setStack(gas);
127+
frequency.storedInfusion.setStack(infusion);
128+
frequency.storedPigment.setStack(pigment);
129+
frequency.storedSlurry.setStack(slurry);
130+
frequency.storedItem.setStack(item);
131+
frequency.storedHeat.setHeat(heat);
132+
return frequency;
133+
}
134+
);
135+
78136
private final Map<GlobalPos, TileEntityQuantumEntangloporter> activeQEs = new Object2ObjectOpenHashMap<>();
79137
private long lastEject = -1;
80138

@@ -83,7 +141,7 @@ public class InventoryFrequency extends Frequency implements IMekanismInventory,
83141
private IInfusionTank storedInfusion;
84142
private IPigmentTank storedPigment;
85143
private ISlurryTank storedSlurry;
86-
private IInventorySlot storedItem;
144+
private BasicInventorySlot storedItem;
87145
public IEnergyContainer storedEnergy;
88146
private BasicHeatCapacitor storedHeat;
89147

@@ -99,13 +157,13 @@ public class InventoryFrequency extends Frequency implements IMekanismInventory,
99157
/**
100158
* @param uuid Should only be null if we have incomplete data that we are loading
101159
*/
102-
public InventoryFrequency(String n, @Nullable UUID uuid) {
103-
super(FrequencyType.INVENTORY, n, uuid);
160+
public InventoryFrequency(String n, @Nullable UUID uuid, SecurityMode securityMode) {
161+
super(FrequencyType.INVENTORY, n, uuid, securityMode);
104162
presetVariables();
105163
}
106164

107-
public InventoryFrequency() {
108-
super(FrequencyType.INVENTORY);
165+
private InventoryFrequency(String name, @Nullable UUID owner, String ownerName, SecurityMode securityMode) {
166+
super(FrequencyType.INVENTORY, name, owner, ownerName, securityMode);
109167
presetVariables();
110168
}
111169

@@ -121,59 +179,6 @@ private void presetVariables() {
121179
1_000, null, this));
122180
}
123181

124-
@Override
125-
public void write(HolderLookup.Provider provider, CompoundTag nbtTags) {
126-
super.write(provider, nbtTags);
127-
nbtTags.put(NBTConstants.ENERGY_STORED, storedEnergy.serializeNBT(provider));
128-
nbtTags.put(NBTConstants.FLUID_STORED, storedFluid.serializeNBT(provider));
129-
nbtTags.put(NBTConstants.GAS_STORED, storedGas.serializeNBT(provider));
130-
nbtTags.put(NBTConstants.INFUSE_TYPE_STORED, storedInfusion.serializeNBT(provider));
131-
nbtTags.put(NBTConstants.PIGMENT_STORED, storedPigment.serializeNBT(provider));
132-
nbtTags.put(NBTConstants.SLURRY_STORED, storedSlurry.serializeNBT(provider));
133-
nbtTags.put(NBTConstants.ITEM, storedItem.serializeNBT(provider));
134-
nbtTags.put(NBTConstants.HEAT_STORED, storedHeat.serializeNBT(provider));
135-
}
136-
137-
@Override
138-
protected void read(HolderLookup.Provider provider, CompoundTag nbtTags) {
139-
super.read(provider, nbtTags);
140-
storedEnergy.deserializeNBT(provider, nbtTags.getCompound(NBTConstants.ENERGY_STORED));
141-
storedFluid.deserializeNBT(provider, nbtTags.getCompound(NBTConstants.FLUID_STORED));
142-
storedGas.deserializeNBT(provider, nbtTags.getCompound(NBTConstants.GAS_STORED));
143-
storedInfusion.deserializeNBT(provider, nbtTags.getCompound(NBTConstants.INFUSE_TYPE_STORED));
144-
storedPigment.deserializeNBT(provider, nbtTags.getCompound(NBTConstants.PIGMENT_STORED));
145-
storedSlurry.deserializeNBT(provider, nbtTags.getCompound(NBTConstants.SLURRY_STORED));
146-
storedItem.deserializeNBT(provider, nbtTags.getCompound(NBTConstants.ITEM));
147-
storedHeat.deserializeNBT(provider, nbtTags.getCompound(NBTConstants.HEAT_STORED));
148-
}
149-
150-
@Override
151-
public void write(RegistryFriendlyByteBuf buffer) {
152-
super.write(buffer);
153-
FloatingLong.STREAM_CODEC.encode(buffer, storedEnergy.getEnergy());
154-
FluidStack.OPTIONAL_STREAM_CODEC.encode(buffer, storedFluid.getFluid());
155-
GasStack.OPTIONAL_STREAM_CODEC.encode(buffer, storedGas.getStack());
156-
InfusionStack.OPTIONAL_STREAM_CODEC.encode(buffer, storedInfusion.getStack());
157-
PigmentStack.OPTIONAL_STREAM_CODEC.encode(buffer, storedPigment.getStack());
158-
SlurryStack.OPTIONAL_STREAM_CODEC.encode(buffer, storedSlurry.getStack());
159-
ItemStack.OPTIONAL_STREAM_CODEC.encode(buffer, storedItem.getStack());
160-
buffer.writeDouble(storedHeat.getHeat());
161-
}
162-
163-
@Override
164-
protected void read(RegistryFriendlyByteBuf dataStream) {
165-
super.read(dataStream);
166-
presetVariables();
167-
storedEnergy.setEnergy(FloatingLong.STREAM_CODEC.decode(dataStream));
168-
storedFluid.setStack(FluidStack.OPTIONAL_STREAM_CODEC.decode(dataStream));
169-
storedGas.setStack(GasStack.OPTIONAL_STREAM_CODEC.decode(dataStream));
170-
storedInfusion.setStack(InfusionStack.OPTIONAL_STREAM_CODEC.decode(dataStream));
171-
storedPigment.setStack(PigmentStack.OPTIONAL_STREAM_CODEC.decode(dataStream));
172-
storedSlurry.setStack(SlurryStack.OPTIONAL_STREAM_CODEC.decode(dataStream));
173-
storedItem.setStack(ItemStack.OPTIONAL_STREAM_CODEC.decode(dataStream));
174-
storedHeat.setHeat(dataStream.readDouble());
175-
}
176-
177182
@NotNull
178183
@Override
179184
public List<IInventorySlot> getInventorySlots(@Nullable Direction side) {

0 commit comments

Comments
 (0)