diff --git a/src/main/java/com/moulberry/flashback/mixin/playback/MixinMinecraftServer.java b/src/main/java/com/moulberry/flashback/mixin/playback/MixinMinecraftServer.java index aba8ccca..13fe60a8 100644 --- a/src/main/java/com/moulberry/flashback/mixin/playback/MixinMinecraftServer.java +++ b/src/main/java/com/moulberry/flashback/mixin/playback/MixinMinecraftServer.java @@ -16,14 +16,14 @@ public class MixinMinecraftServer { /* - * Force the server to use the pending tags we gathered instead of trying - * to load them from the resource pack repository where it doesn't exist + * Keep the tags already installed on replay registries instead of trying + * to load them from the replay server's empty datapack repository. */ @WrapOperation(method = "method_29437", at = @At(value = "INVOKE", target = "Lnet/minecraft/tags/TagLoader;loadTagsForExistingRegistries(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/core/RegistryAccess;)Ljava/util/List;")) public List> loadTagsForExistingRegistries(ResourceManager resourceManager, RegistryAccess registryAccess, Operation>> original) { - if ((Object) this instanceof ReplayServer replayServer && replayServer.overridePendingTags != null) { - return replayServer.overridePendingTags; + if ((Object) this instanceof ReplayServer) { + return List.of(); } return original.call(resourceManager, registryAccess); } diff --git a/src/main/java/com/moulberry/flashback/playback/ReplayConfigurationPacketHandler.java b/src/main/java/com/moulberry/flashback/playback/ReplayConfigurationPacketHandler.java index 5ec3e181..5c4571c8 100644 --- a/src/main/java/com/moulberry/flashback/playback/ReplayConfigurationPacketHandler.java +++ b/src/main/java/com/moulberry/flashback/playback/ReplayConfigurationPacketHandler.java @@ -79,8 +79,6 @@ public void flushPendingConfiguration() { this.pendingResetChat = false; } - List> pendingTags = new ArrayList<>(); - if (this.pendingTags != null && !this.pendingTags.isEmpty()) { this.pendingTags.forEach((resourceKey, networkPayload) -> { var registry = this.replayServer.registryAccess().lookupOrThrow(resourceKey); @@ -91,9 +89,8 @@ public void flushPendingConfiguration() { this.pendingRegistryMap.put(resourceKey, new RegistryDataLoader.NetworkedRegistryData(entry.elements(), networkPayload)); } } - pendingTags.add(registry.prepareTagReload(loadResult)); + registry.prepareTagReload(loadResult).apply(); }); - pendingTags.forEach(Registry.PendingTags::apply); sendTags = true; this.pendingTags = null; } @@ -103,10 +100,10 @@ public void flushPendingConfiguration() { if (this.pendingRegistryMap != null && !this.pendingRegistryMap.isEmpty()) { if (this.packRepository != null) { try (CloseableResourceManager resourceManager = new MultiPackResourceManager(PackType.SERVER_DATA, this.packRepository.openAllSelected())) { - synchronizeRegistries = tryUpdateRegistries(pendingTags, resourceManager); + synchronizeRegistries = tryUpdateRegistries(resourceManager); } } else { - synchronizeRegistries = tryUpdateRegistries(pendingTags, ResourceProvider.EMPTY); + synchronizeRegistries = tryUpdateRegistries(ResourceProvider.EMPTY); } } @@ -120,7 +117,7 @@ public void flushPendingConfiguration() { return; } - this.replayServer.updateRegistry(currentFeatureFlags, pendingTags, initialPackets, configurationTasks, this.knownPackIds); + this.replayServer.updateRegistry(currentFeatureFlags, initialPackets, configurationTasks, this.knownPackIds); // Remove all players for (ServerPlayer player : new ArrayList<>(this.replayServer.getPlayerList().getPlayers())) { @@ -137,11 +134,11 @@ public void flushPendingConfiguration() { this.replayServer.loadLevel(); } - private boolean tryUpdateRegistries(List> pendingTags, ResourceProvider resourceProvider) { + private boolean tryUpdateRegistries(ResourceProvider resourceProvider) { Map>, RegistryDataLoader.NetworkedRegistryData> entries = this.pendingRegistryMap; this.pendingRegistryMap = null; - List> updatedLookups = TagLoader.buildUpdatedLookups(this.replayServer.registryAccess(), pendingTags); + List> updatedLookups = TagLoader.buildUpdatedLookups(this.replayServer.registryAccess(), List.of()); RegistryAccess.Frozen synchronizedRegistries; try { diff --git a/src/main/java/com/moulberry/flashback/playback/ReplayServer.java b/src/main/java/com/moulberry/flashback/playback/ReplayServer.java index b239ed76..09821bc4 100644 --- a/src/main/java/com/moulberry/flashback/playback/ReplayServer.java +++ b/src/main/java/com/moulberry/flashback/playback/ReplayServer.java @@ -52,7 +52,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.server.IntegratedServer; import net.minecraft.core.BlockPos; -import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; import net.minecraft.network.Connection; import net.minecraft.network.RegistryFriendlyByteBuf; @@ -225,9 +224,7 @@ public FlashbackMeta getMetadata() { return this.metadata; } - public List> overridePendingTags = null; - - public void updateRegistry(FeatureFlagSet featureFlagSet, List> pendingTags, + public void updateRegistry(FeatureFlagSet featureFlagSet, List> initialPackets, List configurationTasks, @Nullable Collection knownPackIds) { @@ -251,7 +248,6 @@ public void updateRegistry(FeatureFlagSet featureFlagSet, List