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