From 8c5b6ac87615c8753624641d3450471420148ff1 Mon Sep 17 00:00:00 2001 From: TheCodedOne Date: Sun, 29 Apr 2018 13:31:49 +0100 Subject: [PATCH 1/2] Improve /findbiome to not lag the server out when running --- .../traverse/commands/CommandFindBiome.java | 57 +++++++++++++------ .../traverse/config/TraverseConfig.java | 2 +- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/src/main/java/prospector/traverse/commands/CommandFindBiome.java b/src/main/java/prospector/traverse/commands/CommandFindBiome.java index 745e310..304ad80 100644 --- a/src/main/java/prospector/traverse/commands/CommandFindBiome.java +++ b/src/main/java/prospector/traverse/commands/CommandFindBiome.java @@ -3,6 +3,7 @@ import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.BlockPos; @@ -28,6 +29,9 @@ public static BlockPos spiralOutwardsLookingForBiome(ICommandSender sender, Worl double dist = 0; int n; long start = System.currentTimeMillis(); + BlockPos.PooledMutableBlockPos pos = BlockPos.PooledMutableBlockPos.retain(); + int previous = 0; + int i = 0; for (n = 0; dist < Integer.MAX_VALUE; ++n) { if ((System.currentTimeMillis() - start) > timeout) { return null; @@ -36,7 +40,22 @@ public static BlockPos spiralOutwardsLookingForBiome(ICommandSender sender, Worl dist = a * rootN; x = startX + (dist * Math.sin(b * rootN)); z = startZ + (dist * Math.cos(b * rootN)); - if (world.getBiome(new BlockPos(x, 0, z)).equals(biomeToFind)) { + pos.setPos(x, 0, z); + if (sender instanceof EntityPlayer) { + if (previous == 3) + previous = 0; + String s = (previous == 0 ? "." : previous == 1 ? ".." : "..."); + ((EntityPlayer) sender).sendStatusMessage(new TextComponentString("Scanning" + s), true); + if (i == 1501) { + previous++; + i = 0; + } + i++; + } + if (world.getBiome(pos).equals(biomeToFind)) { + pos.release(); + if (sender instanceof EntityPlayer) + ((EntityPlayer) sender).sendStatusMessage(new TextComponentString("Found Biome"), true); return new BlockPos((int) x, 0, (int) z); } } @@ -54,11 +73,7 @@ public String getUsage(ICommandSender sender) { } @Override - public List getTabCompletions(MinecraftServer server, - ICommandSender sender, - String[] args, - @Nullable - BlockPos targetPos) { + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) { List strings = new ArrayList<>(); for (Biome b : ForgeRegistries.BIOMES.getValues()) { String s = b.getRegistryName().toString(); @@ -86,16 +101,22 @@ public void execute(MinecraftServer server, ICommandSender sender, String[] args return; } long start = System.currentTimeMillis(); - BlockPos pos = spiralOutwardsLookingForBiome(sender, sender.getEntityWorld(), biome, sender.getPosition().getX(), sender.getPosition().getZ(), TraverseConfig.findBiomeCommandTimeout); - if (pos == null) { - sender.sendMessage(new TextComponentString(TextFormatting.RED + "Error! Biome '" + args[0] + "' could not be found after " + TextFormatting.GRAY + TraverseConfig.findBiomeCommandTimeout + "ms" + TextFormatting.RED + ".")); - return; - } - if (sender instanceof EntityPlayerMP) { - EntityPlayerMP playerMP = (EntityPlayerMP) sender; - playerMP.connection.setPlayerLocation(pos.getX(), 150, pos.getZ(), 0, 0); - } - - sender.sendMessage(new TextComponentString(TextFormatting.WHITE + "Found '" + biome.getRegistryName().toString() + "' Biome! " + TextFormatting.GRAY + "(" + (System.currentTimeMillis() - start) + "ms)")); + final Biome finalBiome = biome; + new Thread(() -> { + BlockPos pos = spiralOutwardsLookingForBiome(sender, sender.getEntityWorld(), finalBiome, sender.getPosition().getX(), sender.getPosition().getZ(), TraverseConfig.findBiomeCommandTimeout); + if (pos == null) { + server.addScheduledTask(() -> sender.sendMessage(new TextComponentString(TextFormatting.RED + "Error! Biome '" + args[0] + "' could not be found after " + TextFormatting.GRAY + TraverseConfig.findBiomeCommandTimeout + "ms" + TextFormatting.RED + "."))); + return; + } + if (sender instanceof EntityPlayerMP) { + server.addScheduledTask(() -> { + EntityPlayerMP playerMP = (EntityPlayerMP) sender; + playerMP.connection.setPlayerLocation(pos.getX(), 150, pos.getZ(), 0, 0); + sender.sendMessage(new TextComponentString(TextFormatting.WHITE + "Found '" + finalBiome.getRegistryName().toString() + "' Biome! " + TextFormatting.GRAY + "(" + (System.currentTimeMillis() - start) + "ms)")); + }); + return; + } + server.addScheduledTask(() -> sender.sendMessage(new TextComponentString(TextFormatting.RED + "Error! An unknown error occurred."))); + }, "Biome Finder - Traverse").start(); } -} +} \ No newline at end of file diff --git a/src/main/java/prospector/traverse/config/TraverseConfig.java b/src/main/java/prospector/traverse/config/TraverseConfig.java index c5a69f4..e3c70a2 100644 --- a/src/main/java/prospector/traverse/config/TraverseConfig.java +++ b/src/main/java/prospector/traverse/config/TraverseConfig.java @@ -17,7 +17,7 @@ public class TraverseConfig { public static boolean registerBiomesRegardless = false; public static boolean disableCustomSkies = false; public static boolean vanillaCanyonBlocks = false; - public static int findBiomeCommandTimeout = 20_000; + public static int findBiomeCommandTimeout = 30_000; public static boolean disallowVillages = false; public static boolean disableAutumnalWoods = false; From ac0bfbb2f5ba3dd7edc53bd174ac497a52df139c Mon Sep 17 00:00:00 2001 From: TheCodedOne Date: Sun, 29 Apr 2018 13:36:13 +0100 Subject: [PATCH 2/2] Dont tab complete biomes in the wrong argument slots --- .../traverse/commands/CommandFindBiome.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/prospector/traverse/commands/CommandFindBiome.java b/src/main/java/prospector/traverse/commands/CommandFindBiome.java index 304ad80..69c29c0 100644 --- a/src/main/java/prospector/traverse/commands/CommandFindBiome.java +++ b/src/main/java/prospector/traverse/commands/CommandFindBiome.java @@ -16,6 +16,7 @@ import javax.annotation.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class CommandFindBiome extends CommandBase { @@ -74,13 +75,17 @@ public String getUsage(ICommandSender sender) { @Override public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) { - List strings = new ArrayList<>(); - for (Biome b : ForgeRegistries.BIOMES.getValues()) { - String s = b.getRegistryName().toString(); - if (s.toLowerCase().contains(args[0].toLowerCase())) - strings.add(s); + if(args.length==1) { + List strings = new ArrayList<>(); + for (Biome b : ForgeRegistries.BIOMES.getValues()) { + String s = b.getRegistryName().toString(); + if (s.toLowerCase().contains(args[0].toLowerCase())) + strings.add(s); + } + + return strings; } - return strings; + return Collections.emptyList(); } @Override