diff --git a/gradle.properties b/gradle.properties index df6dd355..ecd41b0d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1G loader_version=0.6.1+build.165 # Mod Properties - mod_version = 1.1.0+v190925 + mod_version = 1.1.0+v190927 maven_group = carpet archives_base_name = fabric-carpet diff --git a/src/main/java/carpet/CarpetServer.java b/src/main/java/carpet/CarpetServer.java index 372657c2..6711e796 100644 --- a/src/main/java/carpet/CarpetServer.java +++ b/src/main/java/carpet/CarpetServer.java @@ -99,16 +99,19 @@ public class CarpetServer // static for now - easier to handle all around the co public static void onPlayerLoggedIn(ServerPlayerEntity player) { + LoggerRegistry.playerConnected(player); extensions.forEach(e -> e.onPlayerLoggedIn(player)); } public static void onPlayerLoggedOut(ServerPlayerEntity player) { + LoggerRegistry.playerDisconnected(player); extensions.forEach(e -> e.onPlayerLoggedOut(player)); } public static void onServerClosed(MinecraftServer server) { + LoggerRegistry.stopLoggers(); extensions.forEach(e -> e.onServerClosed(server)); } } diff --git a/src/main/java/carpet/logging/Logger.java b/src/main/java/carpet/logging/Logger.java index b320d537..783cbd89 100644 --- a/src/main/java/carpet/logging/Logger.java +++ b/src/main/java/carpet/logging/Logger.java @@ -1,13 +1,16 @@ package carpet.logging; import carpet.CarpetServer; +import carpet.settings.CarpetSettings; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.BaseText; import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.function.Supplier; public class Logger @@ -85,6 +88,12 @@ public class Logger return subscribedOnlinePlayers.size() > 0; } + public void serverStopped() + { + subscribedOnlinePlayers.clear(); + subscribedOfflinePlayers.clear(); + } + /** * serves messages to players fetching them from the promise * will repeat invocation for players that share the same option @@ -162,7 +171,7 @@ public class Logger // ----- Event Handlers ----- // - public void onPlayerConnect(PlayerEntity player) + public void onPlayerConnect(PlayerEntity player, boolean firstTime) { // If the player was subscribed to the log and offline, move them to the set of online subscribers. String playerName = player.getName().getString(); @@ -171,6 +180,14 @@ public class Logger subscribedOnlinePlayers.put(playerName, subscribedOfflinePlayers.get(playerName)); subscribedOfflinePlayers.remove(playerName); } + else if(firstTime) + { + Set loggingOptions = new HashSet<>(Arrays.asList(CarpetSettings.defaultLoggers.split(","))); + if (loggingOptions.contains(getLogName())) + { + subscribedOnlinePlayers.put(playerName, getDefault()); + } + } LoggerRegistry.setAccess(this); } diff --git a/src/main/java/carpet/logging/LoggerRegistry.java b/src/main/java/carpet/logging/LoggerRegistry.java index 581f7623..c216c600 100644 --- a/src/main/java/carpet/logging/LoggerRegistry.java +++ b/src/main/java/carpet/logging/LoggerRegistry.java @@ -7,6 +7,7 @@ import net.minecraft.util.DyeColor; import java.lang.reflect.Field; import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -137,14 +138,31 @@ public class LoggerRegistry setAccess(logger); } - public static void playerConnected(PlayerEntity player) + private static Set seenPlayers = new HashSet<>(); + + public static void stopLoggers() { + seenPlayers.clear(); for(Logger log: loggerRegistry.values() ) { - log.onPlayerConnect(player); + log.serverStopped(); } - } + public static void playerConnected(PlayerEntity player) + { + boolean firstTime = false; + if (!seenPlayers.contains(player.getName().getString())) + { + seenPlayers.add(player.getName().getString()); + firstTime = true; + //subscribe them to the defualt loggers + } + for(Logger log: loggerRegistry.values() ) + { + log.onPlayerConnect(player, firstTime); + } + } + public static void playerDisconnected(PlayerEntity player) { for(Logger log: loggerRegistry.values() ) diff --git a/src/main/java/carpet/settings/CarpetSettings.java b/src/main/java/carpet/settings/CarpetSettings.java index d92450d8..58a5767f 100644 --- a/src/main/java/carpet/settings/CarpetSettings.java +++ b/src/main/java/carpet/settings/CarpetSettings.java @@ -27,7 +27,7 @@ import static carpet.settings.RuleCategory.SURVIVAL; public class CarpetSettings { - public static final String carpetVersion = "1.1.0+v190925"; + public static final String carpetVersion = "1.1.0+v190927"; public static final Logger LOG = LogManager.getLogger(); public static boolean skipGenerationChecks = false; public static boolean impendingFillSkipUpdates = false; @@ -172,6 +172,14 @@ public class CarpetSettings ) public static boolean commandLog = true; + @Rule( + desc = "sets these loggers in their default configurations for all new players", + extra = "use csv, like 'tps,mobcaps' for multiple loggers, none for nothing", + category = {CREATIVE, SURVIVAL}, + options = {"none", "tps", "mobcaps,tps"} + ) + public static String defaultLoggers = "none"; + @Rule( desc = "Enables /distance command to measure in game distance between points", extra = "Also enables brown carpet placement action if 'carpets' rule is turned on as well",