11package mekanism .common .lib .frequency ;
22
3+ import com .mojang .datafixers .util .Pair ;
4+ import com .mojang .serialization .DataResult ;
35import it .unimi .dsi .fastutil .objects .Object2ObjectArrayMap ;
46import java .util .ArrayList ;
57import java .util .Collections ;
3133import net .minecraft .core .component .DataComponentMap ;
3234import net .minecraft .core .component .DataComponentType ;
3335import net .minecraft .nbt .CompoundTag ;
36+ import net .minecraft .nbt .NbtOps ;
3437import net .minecraft .nbt .Tag ;
38+ import net .minecraft .resources .RegistryOps ;
3539import net .minecraft .world .entity .player .Player ;
3640import net .minecraft .world .level .Level ;
3741import 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 ()) {
0 commit comments