From ac588c3e55984d0cf195103a4bf0cf6081588a74 Mon Sep 17 00:00:00 2001 From: altrisi Date: Wed, 26 Jul 2023 19:01:03 +0200 Subject: [PATCH] Add utility method to easily run code on all `SettingsManager`s (#1696) --- src/main/java/carpet/CarpetServer.java | 45 +++++++++---------- ...ientPacketListener_clientCommandMixin.java | 7 +-- .../carpet/network/ServerNetworkHandler.java | 12 +---- 3 files changed, 25 insertions(+), 39 deletions(-) diff --git a/src/main/java/carpet/CarpetServer.java b/src/main/java/carpet/CarpetServer.java index 94fb2704..b2e52487 100644 --- a/src/main/java/carpet/CarpetServer.java +++ b/src/main/java/carpet/CarpetServer.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.Consumer; import carpet.commands.CounterCommand; import carpet.commands.DistanceCommand; @@ -88,12 +89,8 @@ public class CarpetServer // static for now - easier to handle all around the co // shoudl not be needed - that bit needs refactoring, but not now. SpawnReporter.reset_spawn_stats(server, true); - settingsManager.attachServer(server); - extensions.forEach(e -> { - SettingsManager sm = e.extensionSettingsManager(); - if (sm != null) sm.attachServer(server); - e.onServerLoaded(server); - }); + forEachManager(sm -> sm.attachServer(server)); + extensions.forEach(e -> e.onServerLoaded(server)); scriptServer = new CarpetScriptServer(server); Carpet.MinecraftServer_addScriptServer(server, scriptServer); MobAI.resetTrackers(); @@ -106,7 +103,7 @@ public class CarpetServer // static for now - easier to handle all around the co HopperCounter.resetAll(minecraftServer, true); extensions.forEach(e -> e.onServerLoadedWorlds(minecraftServer)); // initialize scarpet rules after all extensions are loaded - settingsManager.initializeScarpetRules(); + forEachManager(SettingsManager::initializeScarpetRules); // run fillLimit rule migration now that gamerules are available @SuppressWarnings("unchecked") CarpetRule fillLimit = (CarpetRule) settingsManager.getCarpetRule("fillLimit"); @@ -117,12 +114,6 @@ public class CarpetServer // static for now - easier to handle all around the co { throw new AssertionError(); } - extensions.forEach(e -> { - if (e.extensionSettingsManager() != null) - { - e.extensionSettingsManager().initializeScarpetRules(); - } - }); scriptServer.initializeForWorld(); } @@ -145,11 +136,8 @@ public class CarpetServer // static for now - easier to handle all around the co { return; } - settingsManager.registerCommand(dispatcher, commandBuildContext); - extensions.forEach(e -> { - SettingsManager sm = e.extensionSettingsManager(); - if (sm != null) sm.registerCommand(dispatcher, commandBuildContext); - }); + forEachManager(sm -> sm.registerCommand(dispatcher, commandBuildContext)); + TickCommand.register(dispatcher, commandBuildContext); ProfileCommand.register(dispatcher, commandBuildContext); CounterCommand.register(dispatcher, commandBuildContext); @@ -231,11 +219,22 @@ public class CarpetServer // static for now - easier to handle all around the co } public static void onServerDoneClosing(MinecraftServer server) { - settingsManager.detachServer(); - extensions.forEach(e -> { - SettingsManager manager = e.extensionSettingsManager(); - if (manager != null) manager.detachServer(); - }); + forEachManager(SettingsManager::detachServer); + } + + // not API + // carpet's included + public static void forEachManager(Consumer consumer) + { + consumer.accept(settingsManager); + for (CarpetExtension e : extensions) + { + SettingsManager manager = e.extensionSettingsManager(); + if (manager != null) + { + consumer.accept(manager); + } + } } public static void registerExtensionLoggers() diff --git a/src/main/java/carpet/mixins/ClientPacketListener_clientCommandMixin.java b/src/main/java/carpet/mixins/ClientPacketListener_clientCommandMixin.java index 2b98456b..61ba0dd6 100644 --- a/src/main/java/carpet/mixins/ClientPacketListener_clientCommandMixin.java +++ b/src/main/java/carpet/mixins/ClientPacketListener_clientCommandMixin.java @@ -2,7 +2,6 @@ package carpet.mixins; import carpet.CarpetServer; import carpet.network.CarpetClient; -import carpet.api.settings.SettingsManager; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.player.LocalPlayer; @@ -29,11 +28,7 @@ public class ClientPacketListener_clientCommandMixin if (CarpetServer.minecraft_server == null && !CarpetClient.isCarpet() && minecraft.player != null) { LocalPlayer playerSource = minecraft.player; - CarpetServer.settingsManager.inspectClientsideCommand(playerSource.createCommandSourceStack(), "/"+string); - CarpetServer.extensions.forEach(e -> { - SettingsManager sm = e.extensionSettingsManager(); - if (sm != null) sm.inspectClientsideCommand(playerSource.createCommandSourceStack(), "/"+string); - }); + CarpetServer.forEachManager(sm -> sm.inspectClientsideCommand(playerSource.createCommandSourceStack(), "/" + string)); } } } diff --git a/src/main/java/carpet/network/ServerNetworkHandler.java b/src/main/java/carpet/network/ServerNetworkHandler.java index 0c525f03..c2cf113d 100644 --- a/src/main/java/carpet/network/ServerNetworkHandler.java +++ b/src/main/java/carpet/network/ServerNetworkHandler.java @@ -8,7 +8,6 @@ import carpet.fakes.MinecraftServerInterface; import carpet.fakes.ServerGamePacketListenerImplInterface; import carpet.helpers.ServerTickRateManager; import carpet.script.utils.SnoopyCommandSource; -import carpet.api.settings.SettingsManager; import io.netty.buffer.Unpooled; import java.util.ArrayList; import java.util.HashMap; @@ -78,16 +77,9 @@ public class ServerNetworkHandler CarpetSettings.LOG.info("Player "+playerEntity.getName().getString()+" joined with a matching carpet client"); else CarpetSettings.LOG.warn("Player "+playerEntity.getName().getString()+" joined with another carpet version: "+clientVersion); - DataBuilder data = DataBuilder.create(playerEntity.server); // tickrate related settings are sent on world change - CarpetServer.settingsManager.getCarpetRules().forEach(data::withRule); - CarpetServer.extensions.forEach(e -> { - SettingsManager eManager = e.extensionSettingsManager(); - if (eManager != null) { - eManager.getCarpetRules().forEach(data::withRule); - } - }); - playerEntity.connection.send(new ClientboundCustomPayloadPacket(CarpetClient.CARPET_CHANNEL, data.build())); + CarpetServer.forEachManager(sm -> sm.getCarpetRules().forEach(data::withRule)); + playerEntity.connection.send(new ClientboundCustomPayloadPacket(CarpetClient.CARPET_CHANNEL, data.build() )); } public static void sendPlayerLevelData(ServerPlayer player, ServerLevel level) {