Add utility method to easily run code on all SettingsManagers (#1696)

This commit is contained in:
altrisi authored and GitHub committed 2023-07-26 19:01:03 +02:00
1 parent 36908d6578
commit ac588c3e55
3 files changed
+24 -38

No files matched your search

+21 -22
View File
@@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.function.Consumer;
import carpet.commands.CounterCommand; import carpet.commands.CounterCommand;
import carpet.commands.DistanceCommand; 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. // shoudl not be needed - that bit needs refactoring, but not now.
SpawnReporter.reset_spawn_stats(server, true); SpawnReporter.reset_spawn_stats(server, true);
settingsManager.attachServer(server); forEachManager(sm -> sm.attachServer(server));
extensions.forEach(e -> { extensions.forEach(e -> e.onServerLoaded(server));
SettingsManager sm = e.extensionSettingsManager();
if (sm != null) sm.attachServer(server);
e.onServerLoaded(server);
});
scriptServer = new CarpetScriptServer(server); scriptServer = new CarpetScriptServer(server);
Carpet.MinecraftServer_addScriptServer(server, scriptServer); Carpet.MinecraftServer_addScriptServer(server, scriptServer);
MobAI.resetTrackers(); MobAI.resetTrackers();
@@ -106,7 +103,7 @@ public class CarpetServer // static for now - easier to handle all around the co
HopperCounter.resetAll(minecraftServer, true); HopperCounter.resetAll(minecraftServer, true);
extensions.forEach(e -> e.onServerLoadedWorlds(minecraftServer)); extensions.forEach(e -> e.onServerLoadedWorlds(minecraftServer));
// initialize scarpet rules after all extensions are loaded // initialize scarpet rules after all extensions are loaded
settingsManager.initializeScarpetRules(); forEachManager(SettingsManager::initializeScarpetRules);
// run fillLimit rule migration now that gamerules are available // run fillLimit rule migration now that gamerules are available
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
CarpetRule<Integer> fillLimit = (CarpetRule<Integer>) settingsManager.getCarpetRule("fillLimit"); CarpetRule<Integer> fillLimit = (CarpetRule<Integer>) settingsManager.getCarpetRule("fillLimit");
@@ -117,12 +114,6 @@ public class CarpetServer // static for now - easier to handle all around the co
{ {
throw new AssertionError(); throw new AssertionError();
} }
extensions.forEach(e -> {
if (e.extensionSettingsManager() != null)
{
e.extensionSettingsManager().initializeScarpetRules();
}
});
scriptServer.initializeForWorld(); scriptServer.initializeForWorld();
} }
@@ -145,11 +136,8 @@ public class CarpetServer // static for now - easier to handle all around the co
{ {
return; return;
} }
settingsManager.registerCommand(dispatcher, commandBuildContext); forEachManager(sm -> sm.registerCommand(dispatcher, commandBuildContext));
extensions.forEach(e -> {
SettingsManager sm = e.extensionSettingsManager();
if (sm != null) sm.registerCommand(dispatcher, commandBuildContext);
});
TickCommand.register(dispatcher, commandBuildContext); TickCommand.register(dispatcher, commandBuildContext);
ProfileCommand.register(dispatcher, commandBuildContext); ProfileCommand.register(dispatcher, commandBuildContext);
CounterCommand.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) public static void onServerDoneClosing(MinecraftServer server)
{ {
settingsManager.detachServer(); forEachManager(SettingsManager::detachServer);
extensions.forEach(e -> { }
// not API
// carpet's included
public static void forEachManager(Consumer<SettingsManager> consumer)
{
consumer.accept(settingsManager);
for (CarpetExtension e : extensions)
{
SettingsManager manager = e.extensionSettingsManager(); SettingsManager manager = e.extensionSettingsManager();
if (manager != null) manager.detachServer(); if (manager != null)
}); {
consumer.accept(manager);
}
}
} }
public static void registerExtensionLoggers() public static void registerExtensionLoggers()
@@ -2,7 +2,6 @@ package carpet.mixins;
import carpet.CarpetServer; import carpet.CarpetServer;
import carpet.network.CarpetClient; import carpet.network.CarpetClient;
import carpet.api.settings.SettingsManager;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
@@ -29,11 +28,7 @@ public class ClientPacketListener_clientCommandMixin
if (CarpetServer.minecraft_server == null && !CarpetClient.isCarpet() && minecraft.player != null) if (CarpetServer.minecraft_server == null && !CarpetClient.isCarpet() && minecraft.player != null)
{ {
LocalPlayer playerSource = minecraft.player; LocalPlayer playerSource = minecraft.player;
CarpetServer.settingsManager.inspectClientsideCommand(playerSource.createCommandSourceStack(), "/"+string); CarpetServer.forEachManager(sm -> sm.inspectClientsideCommand(playerSource.createCommandSourceStack(), "/" + string));
CarpetServer.extensions.forEach(e -> {
SettingsManager sm = e.extensionSettingsManager();
if (sm != null) sm.inspectClientsideCommand(playerSource.createCommandSourceStack(), "/"+string);
});
} }
} }
} }
@@ -8,7 +8,6 @@ import carpet.fakes.MinecraftServerInterface;
import carpet.fakes.ServerGamePacketListenerImplInterface; import carpet.fakes.ServerGamePacketListenerImplInterface;
import carpet.helpers.ServerTickRateManager; import carpet.helpers.ServerTickRateManager;
import carpet.script.utils.SnoopyCommandSource; import carpet.script.utils.SnoopyCommandSource;
import carpet.api.settings.SettingsManager;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@@ -78,16 +77,9 @@ public class ServerNetworkHandler
CarpetSettings.LOG.info("Player "+playerEntity.getName().getString()+" joined with a matching carpet client"); CarpetSettings.LOG.info("Player "+playerEntity.getName().getString()+" joined with a matching carpet client");
else else
CarpetSettings.LOG.warn("Player "+playerEntity.getName().getString()+" joined with another carpet version: "+clientVersion); 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 DataBuilder data = DataBuilder.create(playerEntity.server); // tickrate related settings are sent on world change
CarpetServer.settingsManager.getCarpetRules().forEach(data::withRule); CarpetServer.forEachManager(sm -> sm.getCarpetRules().forEach(data::withRule));
CarpetServer.extensions.forEach(e -> { playerEntity.connection.send(new ClientboundCustomPayloadPacket(CarpetClient.CARPET_CHANNEL, data.build() ));
SettingsManager eManager = e.extensionSettingsManager();
if (eManager != null) {
eManager.getCarpetRules().forEach(data::withRule);
}
});
playerEntity.connection.send(new ClientboundCustomPayloadPacket(CarpetClient.CARPET_CHANNEL, data.build()));
} }
public static void sendPlayerLevelData(ServerPlayer player, ServerLevel level) { public static void sendPlayerLevelData(ServerPlayer player, ServerLevel level) {