From 2b79b81c921e8ed8c772ef9a81e9e843fbface87 Mon Sep 17 00:00:00 2001 From: C10udburst <18114966+C10udburst@users.noreply.github.com> Date: Thu, 26 Aug 2021 10:58:37 +0200 Subject: [PATCH] add ability to input seeds as strings --- .../rejects/commands/SeedCommand.java | 13 +++++------ .../cloudburst/rejects/utils/seeds/Seeds.java | 22 +++++++++++++------ 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/main/java/cloudburst/rejects/commands/SeedCommand.java b/src/main/java/cloudburst/rejects/commands/SeedCommand.java index 11ee7ed..c5bfc84 100644 --- a/src/main/java/cloudburst/rejects/commands/SeedCommand.java +++ b/src/main/java/cloudburst/rejects/commands/SeedCommand.java @@ -1,6 +1,7 @@ package cloudburst.rejects.commands; import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; import net.minecraft.command.CommandSource; @@ -16,8 +17,6 @@ import meteordevelopment.meteorclient.utils.Utils; import static com.mojang.brigadier.Command.SINGLE_SUCCESS; -import com.mojang.brigadier.arguments.LongArgumentType; - public class SeedCommand extends Command { private final static SimpleCommandExceptionType NO_SEED = new SimpleCommandExceptionType(new LiteralText("No seed for current world saved.")); @@ -54,15 +53,15 @@ public class SeedCommand extends Command { return SINGLE_SUCCESS; })); - builder.then(argument("seed", LongArgumentType.longArg()).executes(ctx -> { - Seeds.get().setSeed(LongArgumentType.getLong(ctx, "seed")); + builder.then(argument("seed", StringArgumentType.string()).executes(ctx -> { + Seeds.get().setSeed(StringArgumentType.getString(ctx, "seed")); return SINGLE_SUCCESS; })); - builder.then(argument("seed", LongArgumentType.longArg()).then(argument("version", EnumArgumentType.enumArgument(MCVersion.latest())).executes(ctx -> { - Seeds.get().setSeed(LongArgumentType.getLong(ctx, "seed"), EnumArgumentType.getEnum(ctx, "version", MCVersion.latest())); + builder.then(argument("seed", StringArgumentType.string()).then(argument("version", EnumArgumentType.enumArgument(MCVersion.latest())).executes(ctx -> { + Seeds.get().setSeed(StringArgumentType.getString(ctx, "seed"), EnumArgumentType.getEnum(ctx, "version", MCVersion.latest())); return SINGLE_SUCCESS; }))); } -} +} \ No newline at end of file diff --git a/src/main/java/cloudburst/rejects/utils/seeds/Seeds.java b/src/main/java/cloudburst/rejects/utils/seeds/Seeds.java index b29cc67..6c5aabd 100644 --- a/src/main/java/cloudburst/rejects/utils/seeds/Seeds.java +++ b/src/main/java/cloudburst/rejects/utils/seeds/Seeds.java @@ -41,17 +41,17 @@ public class Seeds extends System { version = MCVersion.latest(); return new Seed(mc.getServer().getOverworld().getSeed(), version); } - + return seeds.get(Utils.getWorldName()); } - public void setSeed(long seed, MCVersion version) { + public void setSeed(String seed, MCVersion version) { if (mc.isIntegratedServerRunning()) return; - seeds.put(Utils.getWorldName(), new Seed(seed, version)); + seeds.put(Utils.getWorldName(), new Seed(toSeed(seed), version)); } - public void setSeed(long seed) { + public void setSeed(String seed) { ServerInfo server = mc.getCurrentServerEntry(); MCVersion ver = null; if (server != null) @@ -62,7 +62,6 @@ public class Seeds extends System { sendInvalidVersionWarning(seed, targetVer); ver = MCVersion.latest(); } - setSeed(seed, ver); } @@ -84,9 +83,18 @@ public class Seeds extends System { return this; } - private static void sendInvalidVersionWarning(long seed, String targetVer) { + // https://minecraft.fandom.com/wiki/Seed_(level_generation)#Java_Edition + private static long toSeed(String inSeed) { + try { + return Long.parseLong(inSeed); + } catch (NumberFormatException e) { + return inSeed.hashCode(); + } + } + + private static void sendInvalidVersionWarning(String seed, String targetVer) { BaseText msg = new LiteralText(String.format("Couldn't resolve minecraft version \"%s\". Using %s instead. If you wish to change the version run: ", targetVer, MCVersion.latest().name)); - String cmd = String.format("%sseed %d ", Config.get().prefix, seed); + String cmd = String.format("%sseed %s ", Config.get().prefix, seed); BaseText cmdText = new LiteralText(cmd+""); cmdText.setStyle(cmdText.getStyle() .withUnderline(true)