Skip to content

Commit 32df588

Browse files
committed
Fix some issues with decoding frequencies
1 parent 2ce5b3e commit 32df588

File tree

4 files changed

+12
-10
lines changed

4 files changed

+12
-10
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,10 @@ public void load(@NotNull CompoundTag nbtTags, @NotNull HolderLookup.Provider pr
216216
NBTUtils.setUUIDIfPresent(nbtTags, SerializationConstants.OWNER_UUID, uuid -> loadedOwner = uuid);
217217
ListTag list = nbtTags.getList(SerializationConstants.FREQUENCY_LIST, Tag.TAG_COMPOUND);
218218
loadedFrequencies = new HashList<>();
219+
Codec<FREQ> codec = frequencyType.codec();
220+
RegistryOps<Tag> registryOps = provider.createSerializationContext(NbtOps.INSTANCE);
219221
for (int i = 0; i < list.size(); i++) {
220-
loadedFrequencies.add(frequencyType.create(provider, list.getCompound(i)));
222+
loadedFrequencies.add(codec.decode(registryOps, list.getCompound(i)).getOrThrow().getFirst());
221223
}
222224
}
223225

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,11 @@ public Codec<FREQ> codec() {
107107
return codec;
108108
}
109109

110-
public FREQ create(HolderLookup.Provider provider, CompoundTag tag) {
111-
//TODO - 1.20.5: Re-evaluate that this is reasonable/correct
112-
return codec.decode(provider.createSerializationContext(NbtOps.INSTANCE), tag).getOrThrow().getFirst();
110+
public FREQ create(HolderLookup.Provider provider, CompoundTag identityTag) {
111+
FrequencyIdentity identity = getIdentitySerializer().codec().decode(provider.createSerializationContext(NbtOps.INSTANCE), identityTag).getOrThrow().getFirst();
112+
FREQ frequency = create(identity.key(), identity.ownerUUID(), identity.securityMode());
113+
frequency.setValid(false);
114+
return frequency;
113115
}
114116

115117
public FREQ create(Object key, UUID ownerUUID, SecurityMode securityMode) {

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -335,9 +335,7 @@ public void deserialize(CompoundTag frequencyNBT, HolderLookup.Provider provider
335335

336336
private static void deserializeFrequency(HolderLookup.Provider provider, CompoundTag frequencyNBT, FrequencyType<?> type, FrequencyData frequencyData) {
337337
if (frequencyNBT.contains(type.getName(), Tag.TAG_COMPOUND)) {
338-
Frequency frequency = type.create(provider, frequencyNBT.getCompound(type.getName()));
339-
frequency.setValid(false);
340-
frequencyData.setFrequency(frequency);
338+
frequencyData.setFrequency(type.create(provider, frequencyNBT.getCompound(type.getName())));
341339
}
342340
}
343341

@@ -360,7 +358,7 @@ private CompoundTag serialize(DynamicOps<Tag> ops) {
360358
private static void serializeFrequency(DynamicOps<Tag> ops, FrequencyType<?> type, FrequencyData frequencyData, CompoundTag frequencyNBT) {
361359
Frequency frequency = frequencyData.selectedFrequency;
362360
if (frequency != null) {
363-
CompoundTag frequencyTag = (CompoundTag) type.getIdentitySerializer().codec().encodeStart(ops, frequency.getIdentity()).getOrThrow();
361+
Tag frequencyTag = type.getIdentitySerializer().codec().encodeStart(ops, frequency.getIdentity()).getOrThrow();
364362
//Note: While we save the full frequency data, and do make some use of it in reading
365363
// in general this isn't needed and won't be used as the frequency will be grabbed
366364
// from the frequency manager

src/main/java/mekanism/common/lib/security/SecurityFrequency.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ public class SecurityFrequency extends Frequency {
2727
UUIDUtil.CODEC.optionalFieldOf(SerializationConstants.OWNER_UUID).forGetter(freq -> Optional.ofNullable(freq.getOwner())),
2828
SecurityMode.CODEC.fieldOf(SerializationConstants.SECURITY_MODE).forGetter(SecurityFrequency::getSecurity),
2929
Codec.BOOL.fieldOf(SerializationConstants.OVERRIDE).forGetter(SecurityFrequency::isOverridden),
30-
UUIDUtil.CODEC.listOf().optionalFieldOf(SerializationConstants.TRUSTED, Collections.emptyList()).forGetter(freq -> freq.trusted.elements())
30+
UUIDUtil.CODEC.listOf().optionalFieldOf(SerializationConstants.TRUSTED).forGetter(freq -> freq.trusted.isEmpty() ? Optional.empty() : Optional.of(freq.trusted.elements()))
3131
).apply(instance, (owner, securityMode, override, trustedCache) -> {
3232
SecurityFrequency frequency = new SecurityFrequency(owner.orElse(null), securityMode);
3333
frequency.override = override;
34-
for (UUID trusted : trustedCache) {
34+
for (UUID trusted : trustedCache.orElse(Collections.emptyList())) {
3535
frequency.addTrustedRaw(trusted, MekanismUtils.getLastKnownUsername(trusted));
3636
}
3737
return frequency;

0 commit comments

Comments
 (0)