diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/biome/BiomeCommand.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/biome/BiomeCommand.java index 06e1b0b15..f7d131903 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/biome/BiomeCommand.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/biome/BiomeCommand.java @@ -1,6 +1,11 @@ package com.dfsek.terra.bukkit.command.command.biome; +import com.dfsek.terra.api.world.generation.GenerationPhase; +import com.dfsek.terra.biome.UserDefinedBiome; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.bukkit.command.WorldCommand; +import com.dfsek.terra.bukkit.world.BukkitAdapter; +import com.dfsek.terra.config.lang.LangUtil; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -18,12 +23,9 @@ public class BiomeCommand extends WorldCommand { @Override public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) { - /* - TerraBiomeGrid grid = ((TerraBukkitPlugin) getMain()).getWorld(sender.getWorld()).getGrid(); - UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome(sender.getLocation(), GenerationPhase.POPULATE); - LangUtil.send("command.biome.in", sender, biome.getID()); - - */ + TerraBiomeGrid grid = getMain().getWorld(BukkitAdapter.adapt(sender.getWorld())).getGrid(); + UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome(BukkitAdapter.adapt(sender.getLocation()), GenerationPhase.POPULATE); + LangUtil.send("command.biome.in", BukkitAdapter.adapt(sender), biome.getID()); return true; } @@ -34,7 +36,7 @@ public class BiomeCommand extends WorldCommand { @Override public List getSubCommands() { - return Arrays.asList(new BiomeLocateCommand(this, true), new BiomeLocateCommand(this, false), new BiomeInfoCommand(this)); + return Arrays.asList(new BiomeLocateCommand(this), new BiomeInfoCommand(this)); } @Override diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/biome/BiomeInfoCommand.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/biome/BiomeInfoCommand.java index ec1533693..93029c56b 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/biome/BiomeInfoCommand.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/biome/BiomeInfoCommand.java @@ -1,5 +1,6 @@ package com.dfsek.terra.bukkit.command.command.biome; +import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.bukkit.BukkitCommandSender; import com.dfsek.terra.bukkit.command.WorldCommand; @@ -18,6 +19,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public class BiomeInfoCommand extends WorldCommand { public BiomeInfoCommand(com.dfsek.terra.bukkit.command.Command parent) { @@ -84,14 +86,11 @@ public class BiomeInfoCommand extends WorldCommand { @Override public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { - /* - if(!(sender instanceof Player) || !(((Player) sender).getWorld().getGenerator() instanceof TerraChunkGenerator)) + if(!(sender instanceof Player) || !TerraWorld.isTerraWorld(BukkitAdapter.adapt(((Player) sender).getWorld()))) return Collections.emptyList(); - List ids = ((TerraBukkitPlugin) getMain()).getWorld(((Player) sender).getWorld()).getConfig().getBiomeIDs(); + List ids = getMain().getWorld(BukkitAdapter.adapt(((Player) sender).getWorld())).getConfig().getBiomeIDs(); if(args.length == 1) return ids.stream().filter(string -> string.toUpperCase().startsWith(args[0].toUpperCase())).collect(Collectors.toList()); - - */ return Collections.emptyList(); } } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/biome/BiomeLocateCommand.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/biome/BiomeLocateCommand.java index 8e29c25a3..28d4faa7c 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/biome/BiomeLocateCommand.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/biome/BiomeLocateCommand.java @@ -1,6 +1,20 @@ package com.dfsek.terra.bukkit.command.command.biome; +import com.dfsek.terra.TerraWorld; +import com.dfsek.terra.api.math.vector.Vector3; +import com.dfsek.terra.async.AsyncBiomeFinder; +import com.dfsek.terra.biome.UserDefinedBiome; +import com.dfsek.terra.bukkit.TerraBukkitPlugin; import com.dfsek.terra.bukkit.command.WorldCommand; +import com.dfsek.terra.bukkit.world.BukkitAdapter; +import com.dfsek.terra.config.lang.LangUtil; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -9,54 +23,50 @@ import org.jetbrains.annotations.NotNull; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; public class BiomeLocateCommand extends WorldCommand { - private final boolean tp; - - public BiomeLocateCommand(com.dfsek.terra.bukkit.command.Command parent, boolean teleport) { + public BiomeLocateCommand(com.dfsek.terra.bukkit.command.Command parent) { super(parent); - this.tp = teleport; } @SuppressWarnings("DuplicatedCode") @Override public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) { - /* String id = args[0]; int maxRadius; try { maxRadius = Integer.parseInt(args[1]); } catch(NumberFormatException e) { - LangUtil.send("command.biome.invalid-radius", sender, args[1]); + LangUtil.send("command.biome.invalid-radius", BukkitAdapter.adapt(sender), args[1]); return true; } UserDefinedBiome b; try { - b = ((TerraBukkitPlugin) getMain()).getWorld(world).getConfig().getBiome(id); + b = getMain().getWorld(BukkitAdapter.adapt(world)).getConfig().getBiome(id); } catch(IllegalArgumentException | NullPointerException e) { - LangUtil.send("command.biome.invalid", sender, id); + LangUtil.send("command.biome.invalid", BukkitAdapter.adapt(sender), id); return true; } - Bukkit.getScheduler().runTaskAsynchronously(getMain(), new AsyncBiomeFinder(((TerraBukkitPlugin) getMain()).getWorld(world).getGrid(), b, sender.getLocation().clone().multiply((1D / ((TerraBukkitPlugin) getMain()).getTerraConfig().getBiomeSearchResolution())), 0, maxRadius, location -> { + Bukkit.getScheduler().runTaskAsynchronously((TerraBukkitPlugin) getMain(), new AsyncBiomeFinder(getMain().getWorld(BukkitAdapter.adapt(world)).getGrid(), b, BukkitAdapter.adapt(sender.getLocation().clone().multiply((1D / ((TerraBukkitPlugin) getMain()).getTerraConfig().getBiomeSearchResolution()))), 0, maxRadius, location -> { if(location != null) { ComponentBuilder cm = new ComponentBuilder(String.format("The nearest %s is at ", id.toLowerCase())) .append(String.format("[%d, ~, %d]", location.getBlockX(), location.getBlockZ()), ComponentBuilder.FormatRetention.NONE) .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/minecraft:tp %s %d.0 %.2f %d.0", sender.getName(), location.getBlockX(), sender.getLocation().getY(), location.getBlockZ()))) .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new BaseComponent[] {new TextComponent("Click to teleport")})) .color(ChatColor.GREEN) - .append(String.format(" (%.1f blocks away)", location.add(new Vector(0, sender.getLocation().getY(), 0)).distance(sender.getLocation().toVector())), ComponentBuilder.FormatRetention.NONE); + .append(String.format(" (%.1f blocks away)", location.add(new Vector3(0, sender.getLocation().getY(), 0)).distance(BukkitAdapter.adapt(sender.getLocation().toVector()))), ComponentBuilder.FormatRetention.NONE); sender.spigot().sendMessage(cm.create()); // LangUtil.send("command.biome.biome-found", sender, String.valueOf(location.getBlockX()), String.valueOf(location.getBlockZ())); - } else LangUtil.send("command.biome.unable-to-locate", sender); - }, (TerraBukkitPlugin) getMain())); + } else LangUtil.send("command.biome.unable-to-locate", BukkitAdapter.adapt(sender)); + }, getMain())); - */ return true; } @Override public String getName() { - return tp ? "teleport" : "locate"; + return "locate"; } @Override @@ -71,14 +81,11 @@ public class BiomeLocateCommand extends WorldCommand { @Override public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { - /* - if(!(sender instanceof Player) || !(((Player) sender).getWorld().getGenerator() instanceof TerraChunkGenerator)) + if(!(sender instanceof Player) || !TerraWorld.isTerraWorld(BukkitAdapter.adapt(((Player) sender).getWorld()))) return Collections.emptyList(); - List ids = ((TerraBukkitPlugin) getMain()).getWorld(((Player) sender).getWorld()).getConfig().getBiomeIDs(); + List ids = getMain().getWorld(BukkitAdapter.adapt(((Player) sender).getWorld())).getConfig().getBiomeIDs(); if(args.length == 1) return ids.stream().filter(string -> string.toUpperCase().startsWith(args[0].toUpperCase())).collect(Collectors.toList()); - - */ return Collections.emptyList(); } } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/LocateCommand.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/LocateCommand.java index bc05256e4..9503111e0 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/LocateCommand.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/LocateCommand.java @@ -3,7 +3,6 @@ package com.dfsek.terra.bukkit.command.command.structure; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.async.AsyncStructureFinder; -import com.dfsek.terra.bukkit.BukkitCommandSender; import com.dfsek.terra.bukkit.TerraBukkitPlugin; import com.dfsek.terra.bukkit.command.WorldCommand; import com.dfsek.terra.bukkit.world.BukkitAdapter; @@ -42,14 +41,14 @@ public class LocateCommand extends WorldCommand { try { maxRadius = Integer.parseInt(args[1]); } catch(NumberFormatException e) { - LangUtil.send("command.structure.invalid-radius", new BukkitCommandSender(sender), args[1]); + LangUtil.send("command.structure.invalid-radius", BukkitAdapter.adapt(sender), args[1]); return true; } TerraStructure s; try { s = Objects.requireNonNull(getMain().getWorld(BukkitAdapter.adapt(world)).getConfig().getStructure(id)); } catch(IllegalArgumentException | NullPointerException e) { - LangUtil.send("command.structure.invalid", new BukkitCommandSender(sender), id); + LangUtil.send("command.structure.invalid", BukkitAdapter.adapt(sender), id); return true; } Bukkit.getScheduler().runTaskAsynchronously((TerraBukkitPlugin) getMain(), new AsyncStructureFinder(getMain().getWorld(BukkitAdapter.adapt(world)).getGrid(), s, BukkitAdapter.adapt(sender.getLocation()), 0, maxRadius, (location) -> { @@ -61,7 +60,7 @@ public class LocateCommand extends WorldCommand { .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new BaseComponent[] {new TextComponent("Click to teleport")})) .color(ChatColor.GREEN) .append(String.format(" (%.1f blocks away)", location.add(new Vector3(0, sender.getLocation().getY(), 0)).distance( - new Vector3(sender.getLocation().getX(), sender.getLocation().getY(), sender.getLocation().getZ()))), ComponentBuilder.FormatRetention.NONE); + BukkitAdapter.adapt(sender.getLocation().toVector()))), ComponentBuilder.FormatRetention.NONE); sender.spigot().sendMessage(cm.create()); } else sender.sendMessage("Unable to locate structure. "); diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitAdapter.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitAdapter.java index 3248c8af8..7e522a62a 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitAdapter.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitAdapter.java @@ -1,6 +1,8 @@ package com.dfsek.terra.bukkit.world; +import com.dfsek.terra.api.math.vector.Vector3; +import com.dfsek.terra.api.platform.CommandSender; import com.dfsek.terra.api.platform.block.Axis; import com.dfsek.terra.api.platform.block.BlockFace; import com.dfsek.terra.api.platform.block.data.Bisected; @@ -10,8 +12,10 @@ import com.dfsek.terra.api.platform.block.data.Slab; import com.dfsek.terra.api.platform.block.data.Stairs; import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.platform.world.World; +import com.dfsek.terra.bukkit.BukkitCommandSender; import org.bukkit.Location; import org.bukkit.block.data.type.Wall; +import org.bukkit.util.Vector; /** * Utility class to adapt Bukkit enums to Terra enums. @@ -330,6 +334,22 @@ public final class BukkitAdapter { return new com.dfsek.terra.api.math.vector.Location(adapt(location.getWorld()), location.getX(), location.getY(), location.getZ()); } + public static Vector adapt(Vector3 vector3) { + return new Vector(vector3.getX(), vector3.getY(), vector3.getZ()); + } + + public static Vector3 adapt(Vector vector) { + return new Vector3(vector.getX(), vector.getY(), vector.getZ()); + } + + public static CommandSender adapt(org.bukkit.command.CommandSender sender) { + return new BukkitCommandSender(sender); + } + + public static org.bukkit.command.CommandSender adapt(CommandSender sender) { + return ((BukkitCommandSender) sender).getHandle(); + } + public static World adapt(org.bukkit.World world) { return new BukkitWorld(world); }