From 927613461a6a9021e55da187e87edfb25f13cb2f Mon Sep 17 00:00:00 2001 From: Jonas Gunz Date: Tue, 20 Oct 2020 02:52:57 +0200 Subject: reworked /savedata to /stats --- src/main/java/re/jag/parquet/Parquet.java | 2 +- src/main/java/re/jag/parquet/ParquetSettings.java | 8 +- .../java/re/jag/parquet/commands/Savedata.java | 214 --------------------- src/main/java/re/jag/parquet/commands/Stats.java | 187 ++++++++++++++++++ 4 files changed, 191 insertions(+), 220 deletions(-) delete mode 100644 src/main/java/re/jag/parquet/commands/Savedata.java create mode 100644 src/main/java/re/jag/parquet/commands/Stats.java (limited to 'src/main') diff --git a/src/main/java/re/jag/parquet/Parquet.java b/src/main/java/re/jag/parquet/Parquet.java index b115393..c5cb6a4 100644 --- a/src/main/java/re/jag/parquet/Parquet.java +++ b/src/main/java/re/jag/parquet/Parquet.java @@ -29,7 +29,7 @@ public class Parquet implements ModInitializer { } public static void registerCommands(CommandDispatcher dispatcher) { - if(settings.command_savedata) Savedata.register(dispatcher); + if(settings.command_stats) Stats.register(dispatcher); if(settings.command_cameramode) CameraMode.register(dispatcher); if(settings.command_calculator) Calculator.register(dispatcher); if(settings.command_timediff) TimeDIff.register(dispatcher); diff --git a/src/main/java/re/jag/parquet/ParquetSettings.java b/src/main/java/re/jag/parquet/ParquetSettings.java index 32c52dd..030306d 100644 --- a/src/main/java/re/jag/parquet/ParquetSettings.java +++ b/src/main/java/re/jag/parquet/ParquetSettings.java @@ -16,7 +16,7 @@ public class ParquetSettings { public final boolean stats_villager_trades; public final boolean command_cameramode; - public final boolean command_savedata; + public final boolean command_stats; public final boolean command_calculator; public final boolean command_rename; public final boolean command_timediff; @@ -32,7 +32,7 @@ public class ParquetSettings { this.stats_villager_trades = get_boolean("stats-villager-trades", true); this.command_cameramode = get_boolean("command-cameramode", true); - this.command_savedata = get_boolean("command-savedata", true); + this.command_stats = get_boolean("command-stats", true); this.command_calculator = get_boolean("command-calculator", true); this.command_rename = get_boolean("command-rename", true); this.command_timediff = get_boolean("command-timediff", true); @@ -45,9 +45,8 @@ public class ParquetSettings { try { InputStream inp = Files.newInputStream(_path); properties.load(inp); - } catch (IOException e) { - Parquet.LOG.error("Failed to read from " + _path.getFileName()); + Parquet.LOG.warn("Failed to read from " + _path.getFileName()); } } @@ -55,7 +54,6 @@ public class ParquetSettings { try { OutputStream out = Files.newOutputStream(_path); properties.store(out, "Parquet mod settings"); - } catch (IOException e) { Parquet.LOG.error("Failed to write to " + _path.getFileName()); } diff --git a/src/main/java/re/jag/parquet/commands/Savedata.java b/src/main/java/re/jag/parquet/commands/Savedata.java deleted file mode 100644 index 12e0775..0000000 --- a/src/main/java/re/jag/parquet/commands/Savedata.java +++ /dev/null @@ -1,214 +0,0 @@ -package re.jag.parquet.commands; - -import java.io.File; -import java.util.*; - -import static net.minecraft.server.command.CommandManager.literal; -import static net.minecraft.command.CommandSource.suggestMatching; -import static net.minecraft.server.command.CommandManager.argument; - -import com.google.common.collect.Lists; -import com.mojang.brigadier.CommandDispatcher; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.arguments.FloatArgumentType; -import com.mojang.brigadier.arguments.StringArgumentType; -import com.mojang.authlib.GameProfile; - -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.command.argument.ObjectiveArgumentType; -import net.minecraft.scoreboard.ScoreboardObjective; -import net.minecraft.scoreboard.ScoreboardPlayerScore; -import net.minecraft.scoreboard.ServerScoreboard; -import net.minecraft.text.LiteralText; -import net.minecraft.util.Identifier; -import net.minecraft.util.WorldSavePath; -import net.minecraft.util.registry.Registry; -import re.jag.parquet.Parquet; -import net.minecraft.stat.ServerStatHandler; -import net.minecraft.stat.Stat; -import net.minecraft.stat.StatType; - -public class Savedata { - public static void register(CommandDispatcher dispatcher) { - LiteralArgumentBuilder savedata = literal("savedata"). - requires(source -> source.hasPermissionLevel(4)). - executes((c) -> help(c.getSource())). - then( literal("playersave"). - then(literal("list"). - executes((c) -> list_local_saves(c.getSource())) - ) - ). - then(literal("stats"). - then(argument("player", StringArgumentType.word()). - suggests( (c, b) -> suggestMatching(c.getSource().getPlayerNames() , b)). - then(argument("criteria", StringArgumentType.greedyString()). - suggests((c,b) -> suggestMatching(get_stat_list(), b)). - executes((c) -> print_player_stat ( - c.getSource(), - StringArgumentType.getString(c, "player"), - StringArgumentType.getString(c, "criteria") - )). - then(literal("import").then(argument("score", ObjectiveArgumentType.objective()). - executes((c) -> import_stat_to_scoreboard ( - c.getSource(), - StringArgumentType.getString(c, "player"), - StringArgumentType.getString(c, "criteria"), - ObjectiveArgumentType.getWritableObjective(c, "score"), 1)). - then(argument("multiplier", FloatArgumentType.floatArg()). - executes((c) -> import_stat_to_scoreboard( - c.getSource(), - StringArgumentType.getString(c, "player"), - StringArgumentType.getString(c, "criteria"), - ObjectiveArgumentType.getWritableObjective(c, "score"), - FloatArgumentType.getFloat(c, "multiplier")) - ) - ) - )) - )) - ); - dispatcher.register(savedata); - } - - private static int help(ServerCommandSource source) { - //TODO Help Text - source.sendFeedback(new LiteralText("Hölp goes here"), false); - return 1; - } - - private static int test(ServerCommandSource source, String string) { - source.sendFeedback(new LiteralText(string),false); - return 1; - } - - private static List get_stat_list() { - List ret = Lists.newArrayList(); - Iterator stat_type_iter = Registry.STAT_TYPE.iterator(); - - while(stat_type_iter.hasNext()) { - StatType statType = (StatType)stat_type_iter.next(); - Iterator stat_iter = statType.getRegistry().iterator(); - - while(stat_iter.hasNext()) { - Object object = stat_iter.next(); - String stat_name = Stat.getName(statType, object); - ret.add(stat_name); - } - } - - return ret; - } - - private static Stat get_stat_from_string(String argument) { - - int criteria_name_seperator = argument.indexOf(':'); - - String registry_name=""; - String stat_name=""; - - if (criteria_name_seperator < 0) { - return null; - } else { - registry_name = argument.substring(0,criteria_name_seperator); - stat_name = argument.substring(criteria_name_seperator + 1, argument.length() ); - } - - StatType stat_type = (StatType) Registry.STAT_TYPE.get(Identifier.splitOn(registry_name, '.')); - Object stat_obj = stat_type.getRegistry().get(Identifier.splitOn(stat_name, '.')); - - Stat stat = stat_type.getOrCreateStat(stat_obj); - - return stat; - } - - private static int list_local_saves(ServerCommandSource source) { - //TODO 1.16 fix - - /* - String uuid_list[] = source.getMinecraftServer().getWorld(DimensionType.OVERWORLD).getSaveHandler().getSavedPlayerIds(); - - for (int i = 0; i < uuid_list.length; i++) { - GameProfile profile = source.getMinecraftServer().getUserCache().getByUuid(UUID.fromString(uuid_list[i])); - String name = "N.A."; - - if(profile != null) - name = profile.getName(); - - source.sendFeedback(new LiteralText(name + " (" + uuid_list[i] + ")"), false); - } - */ - - source.sendError(new LiteralText("1.16 Incompatability")); - return 1; - } - - private static int import_stat_to_scoreboard(ServerCommandSource source, String player,String stat, ScoreboardObjective objective, float multiplier) { - int score = get_player_stat(source, player, stat); - if (score < 0) - return 0; - - ServerScoreboard server_scoreboard = source.getMinecraftServer().getScoreboard(); - ScoreboardPlayerScore player_score = server_scoreboard.getPlayerScore(player, objective); - - int mod_score = multiplier >= 0 ? (int)((float)score * multiplier) : (int)((float)score / multiplier * (-1)); - - player_score.setScore(mod_score); - - return 1; - } - - private static ServerStatHandler get_player_stat_handler(ServerCommandSource source, String player_name) { - ServerPlayerEntity player = source.getMinecraftServer().getPlayerManager().getPlayer(player_name); - if (player != null) { - return player.getStatHandler(); - } - - // [ ] TODO 1.16 fix test - GameProfile profile = source.getMinecraftServer().getUserCache().findByName(player_name); - if (profile == null) { - Parquet.LOG.debug("Savedata: User not in Usercache"); - return null; - } - - UUID player_uuid = profile.getId(); - - File file = source.getMinecraftServer().getSavePath(WorldSavePath.STATS).toFile(); - File file2 = new File(file, player_uuid + ".json"); - - if (!file2.exists()) { - Parquet.LOG.debug("Savedata: user stat file not found"); - return null; - } - - return new ServerStatHandler(source.getMinecraftServer(), file2); - } - - private static int print_player_stat(ServerCommandSource source, String player, String stat) { - Integer stat_value = get_player_stat(source, player, stat); - - if (stat_value >= 0) - { - source.sendFeedback(new LiteralText(stat_value.toString()), false); - return 1; - } - return 0; - } - - private static int get_player_stat(ServerCommandSource source, String player_name, String stat_name) { - ServerStatHandler stat_handler = get_player_stat_handler(source, player_name); - - if (stat_handler == null) { - source.sendError(new LiteralText("Failed to get Statistics for Player " + player_name)); - return -1; - } - - Stat stat = get_stat_from_string(stat_name); - - if (stat == null) { - source.sendError(new LiteralText("Invalid stat: " + stat_name)); - return -1; - } - - return stat_handler.getStat(stat); - } -} diff --git a/src/main/java/re/jag/parquet/commands/Stats.java b/src/main/java/re/jag/parquet/commands/Stats.java new file mode 100644 index 0000000..95803c5 --- /dev/null +++ b/src/main/java/re/jag/parquet/commands/Stats.java @@ -0,0 +1,187 @@ +package re.jag.parquet.commands; + +import java.io.File; +import java.util.*; + +import static net.minecraft.server.command.CommandManager.literal; +import static net.minecraft.command.CommandSource.suggestMatching; +import static net.minecraft.server.command.CommandManager.argument; + +import com.google.common.collect.Lists; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.arguments.FloatArgumentType; +import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.authlib.GameProfile; + +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.command.argument.ObjectiveArgumentType; +import net.minecraft.scoreboard.ScoreboardObjective; +import net.minecraft.scoreboard.ScoreboardPlayerScore; +import net.minecraft.scoreboard.ServerScoreboard; +import net.minecraft.text.LiteralText; +import net.minecraft.util.Identifier; +import net.minecraft.util.WorldSavePath; +import net.minecraft.util.registry.Registry; +import re.jag.parquet.Parquet; +import net.minecraft.stat.ServerStatHandler; +import net.minecraft.stat.Stat; +import net.minecraft.stat.StatType; + +public class Stats { + public static void register(CommandDispatcher dispatcher) { + LiteralArgumentBuilder savedata = literal("stats"). + requires(source -> source.hasPermissionLevel(4)). + executes((c) -> help(c.getSource())). + then(argument("player", StringArgumentType.word()). + suggests((c, b) -> suggestMatching(c.getSource().getPlayerNames(), b)). + then(literal("get"). + then(argument("criteria", StringArgumentType.greedyString()). + suggests((c, b) -> suggestMatching(get_stat_list(), b)). + executes((c) -> print_player_stat( + c.getSource(), + StringArgumentType.getString(c, "player"), + StringArgumentType.getString(c, "criteria") + )) + )). + then(literal("import").then(argument("score", ObjectiveArgumentType.objective()). + executes((c) -> import_stat_to_scoreboard( + c.getSource(), + StringArgumentType.getString(c, "player"), + ObjectiveArgumentType.getWritableObjective(c, "score"), 1)). + then(argument("multiplier", FloatArgumentType.floatArg()). + executes((c) -> import_stat_to_scoreboard( + c.getSource(), + StringArgumentType.getString(c, "player"), + ObjectiveArgumentType.getWritableObjective(c, "score"), + FloatArgumentType.getFloat(c, "multiplier")) + ) + ) + )) + ); + dispatcher.register(savedata); + } + + private static int help(ServerCommandSource source) { + //TODO Help Text + source.sendFeedback(new LiteralText("Hölp goes here"), false); + return 1; + } + + private static int test(ServerCommandSource source, String string) { + source.sendFeedback(new LiteralText(string),false); + return 1; + } + + private static List get_stat_list() { + List ret = Lists.newArrayList(); + Iterator stat_type_iter = Registry.STAT_TYPE.iterator(); + + while(stat_type_iter.hasNext()) { + StatType statType = (StatType)stat_type_iter.next(); + Iterator stat_iter = statType.getRegistry().iterator(); + + while(stat_iter.hasNext()) { + Object object = stat_iter.next(); + String stat_name = Stat.getName(statType, object); + ret.add(stat_name); + } + } + + return ret; + } + + private static Stat get_stat_from_string(String argument) { + + int criteria_name_seperator = argument.indexOf(':'); + + String registry_name=""; + String stat_name=""; + + if (criteria_name_seperator < 0) { + return null; + } else { + registry_name = argument.substring(0,criteria_name_seperator); + stat_name = argument.substring(criteria_name_seperator + 1, argument.length() ); + } + + StatType stat_type = (StatType) Registry.STAT_TYPE.get(Identifier.splitOn(registry_name, '.')); + Object stat_obj = stat_type.getRegistry().get(Identifier.splitOn(stat_name, '.')); + + Stat stat = stat_type.getOrCreateStat(stat_obj); + + return stat; + } + + private static int import_stat_to_scoreboard(ServerCommandSource source, String player, ScoreboardObjective objective, float multiplier) { + int score = get_player_stat(source, player, objective.getCriterion().getName()); + if (score < 0) + return 0; + + ServerScoreboard server_scoreboard = source.getMinecraftServer().getScoreboard(); + ScoreboardPlayerScore player_score = server_scoreboard.getPlayerScore(player, objective); + + + int mod_score = multiplier >= 0 ? (int)((float)score * multiplier) : (int)((float)score / multiplier * (-1)); + + player_score.setScore(mod_score); + + return 1; + } + + private static ServerStatHandler get_player_stat_handler(ServerCommandSource source, String player_name) { + ServerPlayerEntity player = source.getMinecraftServer().getPlayerManager().getPlayer(player_name); + if (player != null) { + return player.getStatHandler(); + } + + // [ ] TODO 1.16 fix test + GameProfile profile = source.getMinecraftServer().getUserCache().findByName(player_name); + if (profile == null) { + Parquet.LOG.debug("Savedata: User not in Usercache"); + return null; + } + + UUID player_uuid = profile.getId(); + + File file = source.getMinecraftServer().getSavePath(WorldSavePath.STATS).toFile(); + File file2 = new File(file, player_uuid + ".json"); + + if (!file2.exists()) { + Parquet.LOG.debug("Savedata: user stat file not found"); + return null; + } + + return new ServerStatHandler(source.getMinecraftServer(), file2); + } + + private static int print_player_stat(ServerCommandSource source, String player, String stat) { + Integer stat_value = get_player_stat(source, player, stat); + + if (stat_value >= 0) + { + source.sendFeedback(new LiteralText(stat_value.toString()), false); + return 1; + } + return 0; + } + + private static int get_player_stat(ServerCommandSource source, String player_name, String stat_name) { + ServerStatHandler stat_handler = get_player_stat_handler(source, player_name); + + if (stat_handler == null) { + source.sendError(new LiteralText("Failed to get Statistics for Player " + player_name)); + return -1; + } + + Stat stat = get_stat_from_string(stat_name); + + if (stat == null) { + source.sendError(new LiteralText("Invalid stat: " + stat_name)); + return -1; + } + + return stat_handler.getStat(stat); + } +} -- cgit v1.2.3