Skip to content

Commit 098ce1f

Browse files
committed
Cleanup some stuff relating to frequency identity serializers
1 parent d06f2dd commit 098ce1f

File tree

5 files changed

+33
-102
lines changed

5 files changed

+33
-102
lines changed

src/main/java/mekanism/common/lib/frequency/Frequency.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -194,30 +194,6 @@ public FrequencyIdentity getIdentity() {
194194
return new FrequencyIdentity(getKey(), securityMode, ownerUUID);
195195
}
196196

197-
public boolean areIdentitiesEqual(Frequency other) {
198-
//TODO: Decide if we want to "inline" this to not require creating new identity objects
199-
return getIdentity().equals(other.getIdentity());
200-
}
201-
202-
public CompoundTag serializeIdentity() {
203-
return frequencyType.getIdentitySerializer().serialize(getIdentity());
204-
}
205-
206-
/**
207-
* Like {@link #serializeIdentity()} except ensures the owner information is added if need be.
208-
*/
209-
public CompoundTag serializeIdentityWithOwner() {
210-
CompoundTag serializedIdentity = serializeIdentity();
211-
if (!serializedIdentity.hasUUID(NBTConstants.OWNER_UUID) && ownerUUID != null) {
212-
serializedIdentity.putUUID(NBTConstants.OWNER_UUID, ownerUUID);
213-
}
214-
return serializedIdentity;
215-
}
216-
217197
public record FrequencyIdentity(Object key, SecurityMode securityMode, @Nullable UUID ownerUUID) {
218-
219-
public static FrequencyIdentity load(FrequencyType<?> type, CompoundTag tag) {
220-
return type.getIdentitySerializer().load(tag);
221-
}
222198
}
223199
}

src/main/java/mekanism/common/lib/frequency/IFrequencyHandler.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
import java.util.List;
44
import java.util.UUID;
5-
import mekanism.api.NBTConstants;
65
import mekanism.common.lib.frequency.Frequency.FrequencyIdentity;
7-
import net.minecraft.nbt.CompoundTag;
86

97
public interface IFrequencyHandler {
108

@@ -14,18 +12,6 @@ default <FREQ extends Frequency> FREQ getFrequency(FrequencyType<FREQ> type) {
1412
return getFrequencyComponent().getFrequency(type);
1513
}
1614

17-
/**
18-
* Sets the frequency from a stored super saturated identifier.
19-
*
20-
* @param frequencyCompound Frequency identity super saturated with the owner of the frequency.
21-
*/
22-
default void setFrequency(FrequencyType<?> type, CompoundTag frequencyCompound) {
23-
FrequencyIdentity freq = FrequencyIdentity.load(type, frequencyCompound);
24-
if (freq != null && frequencyCompound.hasUUID(NBTConstants.OWNER_UUID)) {
25-
setFrequency(type, freq, frequencyCompound.getUUID(NBTConstants.OWNER_UUID));
26-
}
27-
}
28-
2915
/**
3016
* Sets or creates a frequency from the data using the given player as the frequency owner.
3117
*/

src/main/java/mekanism/common/lib/frequency/IdentitySerializer.java

Lines changed: 5 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@
33
import com.mojang.serialization.Codec;
44
import com.mojang.serialization.codecs.RecordCodecBuilder;
55
import io.netty.buffer.ByteBuf;
6+
import java.util.Optional;
67
import java.util.UUID;
78
import mekanism.api.NBTConstants;
89
import mekanism.api.security.SecurityMode;
910
import mekanism.common.lib.frequency.Frequency.FrequencyIdentity;
10-
import mekanism.common.util.NBTUtils;
1111
import net.minecraft.core.UUIDUtil;
12-
import net.minecraft.nbt.CompoundTag;
1312
import net.minecraft.network.codec.ByteBufCodecs;
1413
import net.minecraft.network.codec.StreamCodec;
1514
import net.minecraft.util.ExtraCodecs;
@@ -20,13 +19,13 @@ public interface IdentitySerializer {
2019
private static final Codec<FrequencyIdentity> CODEC = RecordCodecBuilder.create(instance -> instance.group(
2120
ExtraCodecs.NON_EMPTY_STRING.fieldOf(NBTConstants.NAME).forGetter(identity -> identity.key().toString()),
2221
SecurityMode.CODEC.fieldOf(NBTConstants.SECURITY_MODE).forGetter(FrequencyIdentity::securityMode),
23-
UUIDUtil.CODEC.fieldOf(NBTConstants.OWNER_UUID).forGetter(FrequencyIdentity::ownerUUID)
24-
).apply(instance, FrequencyIdentity::new));
22+
UUIDUtil.CODEC.optionalFieldOf(NBTConstants.OWNER_UUID).forGetter(identity -> Optional.ofNullable(identity.ownerUUID()))
23+
).apply(instance, (key, security, owner) -> new FrequencyIdentity(key, security, owner.orElse(null))));
2524
private static final StreamCodec<ByteBuf, FrequencyIdentity> STREAM_CODEC = StreamCodec.composite(
2625
ByteBufCodecs.STRING_UTF8, data -> data.key().toString(),
2726
SecurityMode.STREAM_CODEC, FrequencyIdentity::securityMode,
28-
UUIDUtil.STREAM_CODEC, FrequencyIdentity::ownerUUID,
29-
FrequencyIdentity::new
27+
ByteBufCodecs.optional(UUIDUtil.STREAM_CODEC), identity -> Optional.ofNullable(identity.ownerUUID()),
28+
(key, security, owner) -> new FrequencyIdentity(key, security, owner.orElse(null))
3029
);
3130

3231
@Override
@@ -38,30 +37,6 @@ public Codec<FrequencyIdentity> codec() {
3837
public StreamCodec<ByteBuf, FrequencyIdentity> streamCodec() {
3938
return STREAM_CODEC;
4039
}
41-
42-
@Override
43-
public FrequencyIdentity load(CompoundTag data) {
44-
String name = data.getString(NBTConstants.NAME);
45-
if (!name.isEmpty()) {
46-
SecurityMode securityMode = SecurityMode.BY_ID.apply(data.getInt(NBTConstants.SECURITY_MODE));
47-
if (data.hasUUID(NBTConstants.OWNER_UUID)) {
48-
return new FrequencyIdentity(name, securityMode, data.getUUID(NBTConstants.OWNER_UUID));
49-
}
50-
return new FrequencyIdentity(name, securityMode, null);
51-
}
52-
return null;
53-
}
54-
55-
@Override
56-
public CompoundTag serialize(FrequencyIdentity data) {
57-
CompoundTag tag = new CompoundTag();
58-
tag.putString(NBTConstants.NAME, data.key().toString());
59-
NBTUtils.writeEnum(tag, NBTConstants.SECURITY_MODE, data.securityMode());
60-
if (data.ownerUUID() != null) {
61-
tag.putUUID(NBTConstants.OWNER_UUID, data.ownerUUID());
62-
}
63-
return tag;
64-
}
6540
};
6641

6742
IdentitySerializer UUID = new IdentitySerializer() {
@@ -84,31 +59,9 @@ public Codec<FrequencyIdentity> codec() {
8459
public StreamCodec<ByteBuf, FrequencyIdentity> streamCodec() {
8560
return STREAM_CODEC;
8661
}
87-
88-
@Override
89-
public FrequencyIdentity load(CompoundTag data) {
90-
if (data.hasUUID(NBTConstants.OWNER_UUID)) {
91-
UUID owner = data.getUUID(NBTConstants.OWNER_UUID);
92-
return new FrequencyIdentity(owner, SecurityMode.BY_ID.apply(data.getInt(NBTConstants.PUBLIC_FREQUENCY)), owner);
93-
}
94-
return null;
95-
}
96-
97-
@Override
98-
public CompoundTag serialize(FrequencyIdentity data) {
99-
CompoundTag tag = new CompoundTag();
100-
tag.putUUID(NBTConstants.OWNER_UUID, (UUID) data.key());
101-
NBTUtils.writeEnum(tag, NBTConstants.SECURITY_MODE, data.securityMode());
102-
return tag;
103-
}
10462
};
10563

10664
Codec<FrequencyIdentity> codec();
10765

10866
StreamCodec<ByteBuf, FrequencyIdentity> streamCodec();
109-
110-
//TODO - 1.20.5: Remove in favor of using codecs?
111-
FrequencyIdentity load(CompoundTag data);
112-
113-
CompoundTag serialize(FrequencyIdentity data);
11467
}

src/main/java/mekanism/common/lib/frequency/TileComponentFrequency.java

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package mekanism.common.lib.frequency;
22

3+
import com.mojang.datafixers.util.Pair;
4+
import com.mojang.serialization.DataResult;
35
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap;
46
import java.util.ArrayList;
57
import java.util.Collections;
@@ -31,7 +33,9 @@
3133
import net.minecraft.core.component.DataComponentMap;
3234
import net.minecraft.core.component.DataComponentType;
3335
import net.minecraft.nbt.CompoundTag;
36+
import net.minecraft.nbt.NbtOps;
3437
import net.minecraft.nbt.Tag;
38+
import net.minecraft.resources.RegistryOps;
3539
import net.minecraft.world.entity.player.Player;
3640
import net.minecraft.world.level.Level;
3741
import net.minecraft.world.level.block.entity.BlockEntity;
@@ -260,6 +264,15 @@ public String getComponentKey() {
260264
@Override
261265
public void applyImplicitComponents(@NotNull BlockEntity.DataComponentInput input) {
262266
//TODO - 1.20.5: Implement this
267+
/*if (hasCustomFrequencies()) {
268+
CompoundTag frequencyComponent = input.get(MekanismDataComponents.FREQUENCY_COMPONENT);
269+
if (frequencyComponent != null) {
270+
deserialize(frequencyComponent, );
271+
}
272+
//TODO - 1.20.5: Figure out if we need to check the non security frequencies and the specific frequency components?
273+
for (Map.Entry<FrequencyType<?>, FrequencyData> entry : nonSecurityFrequencies.entrySet()) {
274+
}
275+
}*/
263276
}
264277

265278
@Override
@@ -337,8 +350,9 @@ private static void serializeFrequency(FrequencyData frequencyData, CompoundTag
337350
}
338351
}
339352

340-
public void readConfiguredFrequencies(Player player, CompoundTag data) {
353+
public void readConfiguredFrequencies(HolderLookup.Provider provider, Player player, CompoundTag data) {
341354
if (hasCustomFrequencies() && data.contains(getComponentKey(), Tag.TAG_COMPOUND)) {
355+
RegistryOps<Tag> registryOps = provider.createSerializationContext(NbtOps.INSTANCE);
342356
CompoundTag frequencyNBT = data.getCompound(getComponentKey());
343357
for (Map.Entry<FrequencyType<?>, FrequencyData> entry : nonSecurityFrequencies.entrySet()) {
344358
FrequencyType<?> type = entry.getKey();
@@ -348,13 +362,13 @@ public void readConfiguredFrequencies(Player player, CompoundTag data) {
348362
}
349363
if (frequencyNBT.contains(type.getName(), Tag.TAG_COMPOUND)) {
350364
CompoundTag frequencyData = frequencyNBT.getCompound(type.getName());
351-
if (frequencyData.hasUUID(NBTConstants.OWNER_UUID)) {
352-
FrequencyIdentity identity = FrequencyIdentity.load(type, frequencyData);
353-
if (identity != null) {
354-
UUID owner = frequencyData.getUUID(NBTConstants.OWNER_UUID);
355-
if (identity.securityMode() == SecurityMode.PUBLIC || owner.equals(player.getUUID())) {
365+
DataResult<Pair<FrequencyIdentity, Tag>> decoded = type.getIdentitySerializer().codec().decode(registryOps, frequencyData);
366+
if (decoded.isSuccess()) {
367+
FrequencyIdentity identity = decoded.getOrThrow().getFirst();
368+
if (identity.ownerUUID() != null) {
369+
if (identity.securityMode() == SecurityMode.PUBLIC || identity.ownerUUID().equals(player.getUUID())) {
356370
//If the frequency is public or the player is the owner allow setting the frequency
357-
setFrequencyFromData(type, identity, owner, entry.getValue());
371+
setFrequencyFromData(type, identity, identity.ownerUUID(), entry.getValue());
358372
}
359373
continue;
360374
}
@@ -366,13 +380,15 @@ public void readConfiguredFrequencies(Player player, CompoundTag data) {
366380
}
367381
}
368382

369-
public void writeConfiguredFrequencies(CompoundTag data) {
383+
public void writeConfiguredFrequencies(HolderLookup.Provider provider, CompoundTag data) {
384+
RegistryOps<Tag> registryOps = provider.createSerializationContext(NbtOps.INSTANCE);
370385
CompoundTag frequencyNBT = new CompoundTag();
371386
for (Map.Entry<FrequencyType<?>, FrequencyData> entry : nonSecurityFrequencies.entrySet()) {
387+
FrequencyType<?> type = entry.getKey();
372388
Frequency frequency = entry.getValue().selectedFrequency;
373-
if (frequency != null && entry.getKey() != FrequencyType.SECURITY) {
389+
if (frequency != null && type != FrequencyType.SECURITY) {
374390
//Don't allow transferring security data via config cards
375-
frequencyNBT.put(entry.getKey().getName(), frequency.serializeIdentityWithOwner());
391+
frequencyNBT.put(type.getName(), type.getIdentitySerializer().codec().encodeStart(registryOps, frequency.getIdentity()).getOrThrow());
376392
}
377393
}
378394
if (!frequencyNBT.isEmpty()) {

src/main/java/mekanism/common/tile/base/TileEntityMekanism.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1528,14 +1528,14 @@ public AttachedHeat collectHeatCapacitors(DataComponentMap.Builder builder, List
15281528
public CompoundTag getConfigurationData(HolderLookup.Provider provider, Player player) {
15291529
CompoundTag data = new CompoundTag();
15301530
writeSustainedData(provider, data);
1531-
getFrequencyComponent().writeConfiguredFrequencies(data);
1531+
getFrequencyComponent().writeConfiguredFrequencies(provider, data);
15321532
return data;
15331533
}
15341534

15351535
@Override
15361536
public void setConfigurationData(HolderLookup.Provider provider, Player player, CompoundTag data) {
15371537
readSustainedData(provider, data);
1538-
getFrequencyComponent().readConfiguredFrequencies(player, data);
1538+
getFrequencyComponent().readConfiguredFrequencies(provider, player, data);
15391539
}
15401540

15411541
@Override

0 commit comments

Comments
 (0)