From d345a8430c94c5fa12928dc9711bc5742118b57e Mon Sep 17 00:00:00 2001 From: ThePixelbrain <19214217+ThePixelbrain@users.noreply.github.com> Date: Fri, 16 Jun 2023 22:47:54 +0200 Subject: [PATCH] Split user and admin commands --- .../com/cricketcraft/ftbisland/Config.java | 17 +-- .../cricketcraft/ftbisland/FTBIslands.java | 12 +- .../cricketcraft/ftbisland/IslandCreator.java | 27 ++-- .../cricketcraft/ftbisland/IslandUtils.java | 124 +++++++++++++----- .../commands/CreateIslandCommand.java | 17 +-- .../commands/DeleteIslandCommand.java | 23 ++-- .../ftbisland/commands/ListIslandCommand.java | 31 ++++- .../commands/RenameIslandCommand.java | 28 ++-- .../commands/TeleportIslandCommand.java | 22 ++-- .../commands/admin/AdminCreateCommand.java | 46 +++++++ .../AdminDeleteCommand.java} | 20 +-- .../commands/admin/AdminRenameCommand.java | 42 ++++++ .../commands/admin/AdminTeleportCommand.java | 46 +++++++ .../ftbisland/model/IslandContainer.java | 29 +++- .../resources/assets/ftbi/lang/en_US.lang | 12 -- 15 files changed, 348 insertions(+), 148 deletions(-) create mode 100644 src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminCreateCommand.java rename src/main/java/com/cricketcraft/ftbisland/commands/{JoinIslandCommand.java => admin/AdminDeleteCommand.java} (53%) create mode 100644 src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminRenameCommand.java create mode 100644 src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminTeleportCommand.java delete mode 100644 src/main/resources/assets/ftbi/lang/en_US.lang diff --git a/src/main/java/com/cricketcraft/ftbisland/Config.java b/src/main/java/com/cricketcraft/ftbisland/Config.java index 1cae5cf..fa6babb 100644 --- a/src/main/java/com/cricketcraft/ftbisland/Config.java +++ b/src/main/java/com/cricketcraft/ftbisland/Config.java @@ -11,6 +11,7 @@ public class Config { private static Configuration config; + public static int maxIslandsPerPlayer = 1; public static void init(File file) { if (config == null) { @@ -20,14 +21,6 @@ public static void init(File file) { } private static void loadConfig() { - FTBIslands.maxIslands = config.getInt( - "Max Islands", - "misc", - 100, - 1, - 1000, - "The maximum amount of islands that can be created. This number will be multiplied by four." - + " Be careful with high numbers."); if (!config.hasKey("misc", "Island Type")) { boolean skyFactory = config .getBoolean("Sky Factory", "misc", false, "Set this to true if you are playing on Sky Factory."); @@ -77,6 +70,14 @@ private static void loadConfig() { } } + maxIslandsPerPlayer = config.getInt( + "Max Islands Per Player", + "misc", + maxIslandsPerPlayer, + 0, + 1000, + "Maximum amount of islands a player can own"); + if (config.hasChanged()) { config.save(); } diff --git a/src/main/java/com/cricketcraft/ftbisland/FTBIslands.java b/src/main/java/com/cricketcraft/ftbisland/FTBIslands.java index c997390..022d4b4 100644 --- a/src/main/java/com/cricketcraft/ftbisland/FTBIslands.java +++ b/src/main/java/com/cricketcraft/ftbisland/FTBIslands.java @@ -6,6 +6,10 @@ import org.apache.logging.log4j.Logger; import com.cricketcraft.ftbisland.commands.*; +import com.cricketcraft.ftbisland.commands.admin.AdminCreateCommand; +import com.cricketcraft.ftbisland.commands.admin.AdminDeleteCommand; +import com.cricketcraft.ftbisland.commands.admin.AdminRenameCommand; +import com.cricketcraft.ftbisland.commands.admin.AdminTeleportCommand; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.event.FMLPreInitializationEvent; @@ -20,7 +24,6 @@ acceptableRemoteVersions = "*") public class FTBIslands { - public static int maxIslands; public static Logger logger; public static String islandType; public static LMMod mod; @@ -33,10 +36,13 @@ public void serverLoading(FMLServerStartingEvent event) { logger.info("Registering commands."); event.registerServerCommand(new CreateIslandCommand()); event.registerServerCommand(new DeleteIslandCommand()); - event.registerServerCommand(new JoinIslandCommand()); + event.registerServerCommand(new TeleportIslandCommand()); event.registerServerCommand(new ListIslandCommand()); event.registerServerCommand(new RenameIslandCommand()); - event.registerServerCommand(new TeleportIslandCommand()); + event.registerServerCommand(new AdminCreateCommand()); + event.registerServerCommand(new AdminDeleteCommand()); + event.registerServerCommand(new AdminRenameCommand()); + event.registerServerCommand(new AdminTeleportCommand()); logger.info("Finished registering commands."); islandStorage.reloadContainer(); } diff --git a/src/main/java/com/cricketcraft/ftbisland/IslandCreator.java b/src/main/java/com/cricketcraft/ftbisland/IslandCreator.java index fee59af..d9b3793 100644 --- a/src/main/java/com/cricketcraft/ftbisland/IslandCreator.java +++ b/src/main/java/com/cricketcraft/ftbisland/IslandCreator.java @@ -1,6 +1,6 @@ package com.cricketcraft.ftbisland; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; @@ -8,7 +8,6 @@ import net.minecraft.tileentity.TileEntityChest; import net.minecraft.tileentity.TileEntitySign; import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; import com.cricketcraft.ftbisland.model.Island; import com.cricketcraft.ftbisland.model.IslandContainer; @@ -20,7 +19,8 @@ public class IslandCreator { private static final Item chickenStick = GameRegistry.findItem("excompressum", "chickenStick"); - public static void spawnIslandAt(World world, int x, int y, int z, String islandName, EntityPlayer owner) { + public static void spawnIslandAt(int x, int y, int z, String islandName, EntityPlayerMP owner) { + World world = owner.worldObj; if (FTBIslands.islandType.equalsIgnoreCase("tree")) { world.setBlock(x, y, z, Blocks.grass); for (int c = -3; c < 2; c++) { @@ -76,16 +76,17 @@ public static void spawnIslandAt(World world, int x, int y, int z, String island } } } else { - for (int c = 0; c < 3; c++) { - for (int d = 0; d < 3; d++) { + for (int c = -1; c < 2; c++) { + for (int d = -1; d < 2; d++) { world.setBlock(x + c, y, z + d, Blocks.dirt); } } - world.setBlock(x + 2, y + 1, z + 1, Blocks.chest); - world.getBlock(x + 2, y + 1, z + 1) - .rotateBlock(world, x + 2, y + 1, z + 1, ForgeDirection.WEST); - TileEntityChest chest = (TileEntityChest) world.getTileEntity(x + 2, y + 1, z + 1); + int chestX = x + 1; + int chestY = y + 1; + int chestZ = z; + world.setBlock(chestX, chestY, chestZ, Blocks.chest, 4, 3); + TileEntityChest chest = (TileEntityChest) world.getTileEntity(chestX, chestY, chestZ); chest.setInventorySlotContents(0, new ItemStack(Blocks.flowing_water, 1)); chest.setInventorySlotContents(1, new ItemStack(Blocks.flowing_lava, 1)); @@ -105,13 +106,9 @@ public static void spawnIslandAt(World world, int x, int y, int z, String island IslandContainer container = FTBIslands.getIslandStorage() .getContainer(); int dim = owner.worldObj.provider.dimensionId; + int offsetY = FTBIslands.islandType.equalsIgnoreCase("tree") ? 7 : 1; container.getIslands() - .add( - new Island( - islandName, - owner.getGameProfile() - .getId(), - new Island.Position(x, y, z, dim))); + .add(new Island(islandName, owner.getUniqueID(), new Island.Position(x, y + offsetY, z, dim))); container.incrementIslandsCreated(dim); FTBIslands.getIslandStorage() .saveContainer(); diff --git a/src/main/java/com/cricketcraft/ftbisland/IslandUtils.java b/src/main/java/com/cricketcraft/ftbisland/IslandUtils.java index baf21af..7863ccc 100644 --- a/src/main/java/com/cricketcraft/ftbisland/IslandUtils.java +++ b/src/main/java/com/cricketcraft/ftbisland/IslandUtils.java @@ -2,10 +2,7 @@ import java.util.*; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.util.ChatComponentText; -import net.minecraft.world.World; import org.apache.commons.lang3.tuple.Pair; @@ -13,63 +10,118 @@ public class IslandUtils { - public static void createIsland(World world, String islandName, EntityPlayer owner) { + public enum StatusCode { + + SUCCESS("Success!"), + FAIL_EXIST("Island %s already exists!"), + FAIL_NOT_EXIST("Island %s doesn't exist!"), + FAIL_MAX_ISLANDS("A player can only have %d island(s)!"), + FAIL_WRONG_OWNER("Island %s is owned by a different player!"); + + private final String message; + private Object[] args; + + StatusCode(String message) { + this.message = message; + } + + public StatusCode setArgs(Object... args) { + this.args = args; + return this; + } + + public String getMessage() { + return String.format(message, args); + } + } + + public static StatusCode createIsland(String islandName, EntityPlayerMP owner, boolean adminSender) { FTBIslands.getIslandStorage() .reloadContainer(); + if (FTBIslands.getIslandStorage() + .getContainer() + .doesIslandExist(islandName)) { + return StatusCode.FAIL_EXIST.setArgs(islandName); + } + if (!adminSender && FTBIslands.getIslandStorage() + .getContainer() + .islandsOwnedByUser(owner.getUniqueID()) >= Config.maxIslandsPerPlayer) { + return StatusCode.FAIL_MAX_ISLANDS.setArgs(Config.maxIslandsPerPlayer); + } Pair spiralLoc = calculateSpiral( FTBIslands.getIslandStorage() .getContainer() .getIslandsCreated(owner.worldObj.provider.dimensionId)); - IslandCreator.spawnIslandAt( - world, - spiralLoc.getLeft() * 512 + 256, - 64, - spiralLoc.getRight() * 512 + 256, - islandName, - owner); + IslandCreator + .spawnIslandAt(spiralLoc.getLeft() * 512 + 256, 64, spiralLoc.getRight() * 512 + 256, islandName, owner); + return StatusCode.SUCCESS; } - public static void renameIsland(Island island, String newName) { - island.setName(newName); + public static StatusCode renameIsland(String oldName, String newName, UUID owner, boolean adminSender) { + FTBIslands.getIslandStorage() + .reloadContainer(); + Optional island = FTBIslands.getIslandStorage() + .getContainer() + .getIsland(oldName); + if (island.isEmpty()) { + return StatusCode.FAIL_NOT_EXIST.setArgs(oldName); + } + if (!adminSender && !island.get() + .getOwner() + .equals(owner)) { + return StatusCode.FAIL_WRONG_OWNER.setArgs(oldName); + } + if (FTBIslands.getIslandStorage() + .getContainer() + .doesIslandExist(newName)) { + return StatusCode.FAIL_EXIST.setArgs(newName); + } + island.get() + .setName(newName); FTBIslands.getIslandStorage() .saveContainer(); + return StatusCode.SUCCESS; } - public static void joinIsland(String islandName, EntityPlayer player) { + public static StatusCode teleportToIsland(String islandName, EntityPlayerMP player) { FTBIslands.getIslandStorage() .reloadContainer(); Optional island = FTBIslands.getIslandStorage() .getContainer() - .getIslandByName(islandName); - if (island.isPresent()) { - Island.Position pos = island.get() - .getPos(); - if (player.dimension != pos.getDim()) { - player.travelToDimension(pos.getDim()); - } - int x = pos.getX(); - int y = pos.getY(); - int z = pos.getZ(); - int height = FTBIslands.islandType.equalsIgnoreCase("tree") ? 6 : 2; - double xAndZ = FTBIslands.islandType.equalsIgnoreCase("grass") ? 0.5 : 1.5; - if (player instanceof EntityPlayerMP) { - EntityPlayerMP playerMP = (EntityPlayerMP) player; - playerMP.setPositionAndUpdate(x + xAndZ, y + height, z + xAndZ); - // ChunkCoordinates chunk = new ChunkCoordinates(x, y, z); - // playerMP.setSpawnChunk(chunk, true); - } - } else { - player.addChatComponentMessage(new ChatComponentText("Island does not exist!")); + .getIsland(islandName); + if (island.isEmpty()) { + return StatusCode.FAIL_NOT_EXIST.setArgs(islandName); } + Island.Position pos = island.get() + .getPos(); + if (player.dimension != pos.getDim()) { + player.travelToDimension(pos.getDim()); + } + player.setPositionAndUpdate(pos.getX() + .5, pos.getY(), pos.getZ() + .5); + return StatusCode.SUCCESS; } - public static void deleteIsland(Island island) { + public static StatusCode deleteIsland(String islandName, UUID owner, boolean adminSender) { + FTBIslands.getIslandStorage() + .reloadContainer(); + Optional island = FTBIslands.getIslandStorage() + .getContainer() + .getIsland(islandName); + if (island.isEmpty()) { + return StatusCode.FAIL_NOT_EXIST.setArgs(islandName); + } + if (!adminSender && !island.get() + .getOwner() + .equals(owner)) { + return StatusCode.FAIL_WRONG_OWNER.setArgs(islandName); + } FTBIslands.getIslandStorage() .getContainer() .getIslands() - .remove(island); + .remove(island.get()); FTBIslands.getIslandStorage() .saveContainer(); + return StatusCode.SUCCESS; } private static Pair calculateSpiral(int index) { diff --git a/src/main/java/com/cricketcraft/ftbisland/commands/CreateIslandCommand.java b/src/main/java/com/cricketcraft/ftbisland/commands/CreateIslandCommand.java index c69242b..ad4c1f8 100644 --- a/src/main/java/com/cricketcraft/ftbisland/commands/CreateIslandCommand.java +++ b/src/main/java/com/cricketcraft/ftbisland/commands/CreateIslandCommand.java @@ -2,9 +2,9 @@ import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; -import com.cricketcraft.ftbisland.FTBIslands; import com.cricketcraft.ftbisland.IslandUtils; import ftb.lib.api.cmd.CommandLM; @@ -13,7 +13,7 @@ public class CreateIslandCommand extends CommandLM { public CreateIslandCommand() { - super("island_create", CommandLevel.OP); + super("island_create", CommandLevel.ALL); } @Override @@ -24,14 +24,11 @@ public String getCommandUsage(ICommandSender ics) { @Override public IChatComponent onCommand(ICommandSender iCommandSender, String[] strings) throws CommandException { checkArgs(strings, 1); - FTBIslands.getIslandStorage() - .reloadContainer(); - if (FTBIslands.getIslandStorage() - .getContainer() - .doesIslandExist(strings[0])) { - return error(FTBIslands.mod.chatComponent("cmd.create_exists", strings[0])); + IslandUtils.StatusCode status = IslandUtils + .createIsland(strings[0], getCommandSenderAsPlayer(iCommandSender), false); + if (status != IslandUtils.StatusCode.SUCCESS) { + return error(new ChatComponentText(status.getMessage())); } - IslandUtils.createIsland(iCommandSender.getEntityWorld(), strings[0], getCommandSenderAsPlayer(iCommandSender)); - return FTBIslands.mod.chatComponent("cmd.create_success", strings[0]); + return new ChatComponentText(String.format("Island %s successfully created", strings[0])); } } diff --git a/src/main/java/com/cricketcraft/ftbisland/commands/DeleteIslandCommand.java b/src/main/java/com/cricketcraft/ftbisland/commands/DeleteIslandCommand.java index 1c79f97..0b0aaac 100644 --- a/src/main/java/com/cricketcraft/ftbisland/commands/DeleteIslandCommand.java +++ b/src/main/java/com/cricketcraft/ftbisland/commands/DeleteIslandCommand.java @@ -1,14 +1,14 @@ package com.cricketcraft.ftbisland.commands; -import java.util.Optional; +import java.util.UUID; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; import com.cricketcraft.ftbisland.FTBIslands; import com.cricketcraft.ftbisland.IslandUtils; -import com.cricketcraft.ftbisland.model.Island; import ftb.lib.api.cmd.CommandLM; import ftb.lib.api.cmd.CommandLevel; @@ -16,7 +16,7 @@ public class DeleteIslandCommand extends CommandLM { public DeleteIslandCommand() { - super("island_delete", CommandLevel.OP); + super("island_delete", CommandLevel.ALL); } @Override @@ -26,23 +26,20 @@ public String getCommandUsage(ICommandSender ics) { @Override public String[] getTabStrings(ICommandSender ics, String[] args, int i) throws CommandException { + UUID uuid = getCommandSenderAsPlayer(ics).getUniqueID(); return i == 0 ? FTBIslands.getIslandStorage() .getContainer() - .getAllIslandNames() : null; + .getIslandNames(uuid) : null; } @Override public IChatComponent onCommand(ICommandSender iCommandSender, String[] strings) throws CommandException { checkArgs(strings, 1); - FTBIslands.getIslandStorage() - .reloadContainer(); - Optional island = FTBIslands.getIslandStorage() - .getContainer() - .getIslandByName(strings[0]); - if (!island.isPresent()) { - return error(FTBIslands.mod.chatComponent("cmd.delete_not_exist", strings[0])); + UUID uuid = getCommandSenderAsPlayer(iCommandSender).getUniqueID(); + IslandUtils.StatusCode status = IslandUtils.deleteIsland(strings[0], uuid, false); + if (status != IslandUtils.StatusCode.SUCCESS) { + return error(new ChatComponentText(status.getMessage())); } - IslandUtils.deleteIsland(island.get()); - return FTBIslands.mod.chatComponent("cmd.delete_success", strings[0]); + return new ChatComponentText(String.format("Successfully deleted %s", strings[0])); } } diff --git a/src/main/java/com/cricketcraft/ftbisland/commands/ListIslandCommand.java b/src/main/java/com/cricketcraft/ftbisland/commands/ListIslandCommand.java index 57fdf87..35a8b43 100644 --- a/src/main/java/com/cricketcraft/ftbisland/commands/ListIslandCommand.java +++ b/src/main/java/com/cricketcraft/ftbisland/commands/ListIslandCommand.java @@ -1,7 +1,10 @@ package com.cricketcraft.ftbisland.commands; +import java.util.UUID; + import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; @@ -18,18 +21,32 @@ public ListIslandCommand() { @Override public String getCommandUsage(ICommandSender ics) { - return "/" + this.getCommandName(); + return "/" + this.getCommandName() + " []"; + } + + @Override + public Boolean getUsername(String[] args, int i) { + return i == 0 ? Boolean.TRUE : null; } @Override public IChatComponent onCommand(ICommandSender iCommandSender, String[] strings) throws CommandException { + UUID uuid; + if (strings.length == 0) { + uuid = getCommandSenderAsPlayer(iCommandSender).getUniqueID(); + } else { + uuid = MinecraftServer.getServer() + .func_152358_ax() + .func_152655_a(strings[0]) + .getId(); + } FTBIslands.getIslandStorage() .reloadContainer(); - for (String name : FTBIslands.getIslandStorage() - .getContainer() - .getAllIslandNames()) { - iCommandSender.addChatMessage(new ChatComponentText(name)); - } - return null; + String islands = String.join( + ", ", + FTBIslands.getIslandStorage() + .getContainer() + .getIslandNames(uuid)); + return new ChatComponentText(islands); } } diff --git a/src/main/java/com/cricketcraft/ftbisland/commands/RenameIslandCommand.java b/src/main/java/com/cricketcraft/ftbisland/commands/RenameIslandCommand.java index 66a346b..9d38867 100644 --- a/src/main/java/com/cricketcraft/ftbisland/commands/RenameIslandCommand.java +++ b/src/main/java/com/cricketcraft/ftbisland/commands/RenameIslandCommand.java @@ -1,14 +1,14 @@ package com.cricketcraft.ftbisland.commands; -import java.util.Optional; +import java.util.UUID; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; import com.cricketcraft.ftbisland.FTBIslands; import com.cricketcraft.ftbisland.IslandUtils; -import com.cricketcraft.ftbisland.model.Island; import ftb.lib.api.cmd.CommandLM; import ftb.lib.api.cmd.CommandLevel; @@ -16,7 +16,7 @@ public class RenameIslandCommand extends CommandLM { public RenameIslandCommand() { - super("island_rename", CommandLevel.OP); + super("island_rename", CommandLevel.ALL); } @Override @@ -26,28 +26,20 @@ public String getCommandUsage(ICommandSender ics) { @Override public String[] getTabStrings(ICommandSender ics, String[] args, int i) throws CommandException { + UUID uuid = getCommandSenderAsPlayer(ics).getUniqueID(); return i == 0 ? FTBIslands.getIslandStorage() .getContainer() - .getAllIslandNames() : null; + .getIslandNames(uuid) : null; } @Override public IChatComponent onCommand(ICommandSender iCommandSender, String[] strings) throws CommandException { checkArgs(strings, 2); - FTBIslands.getIslandStorage() - .reloadContainer(); - Optional island = FTBIslands.getIslandStorage() - .getContainer() - .getIslandByName(strings[0]); - if (!island.isPresent()) { - return error(FTBIslands.mod.chatComponent("cmd.rename_old_not_exist", strings[0])); - } - if (FTBIslands.getIslandStorage() - .getContainer() - .doesIslandExist(strings[1])) { - return error(FTBIslands.mod.chatComponent("cmd.rename_new_exists", strings[1])); + UUID uuid = getCommandSenderAsPlayer(iCommandSender).getUniqueID(); + IslandUtils.StatusCode status = IslandUtils.renameIsland(strings[0], strings[1], uuid, false); + if (status != IslandUtils.StatusCode.SUCCESS) { + return error(new ChatComponentText(status.getMessage())); } - IslandUtils.renameIsland(island.get(), strings[1]); - return FTBIslands.mod.chatComponent("cmd.rename_success", strings[0], strings[1]); + return new ChatComponentText(String.format("Successfully renamed %s to %s", strings[0], strings[1])); } } diff --git a/src/main/java/com/cricketcraft/ftbisland/commands/TeleportIslandCommand.java b/src/main/java/com/cricketcraft/ftbisland/commands/TeleportIslandCommand.java index f26130f..69838a4 100644 --- a/src/main/java/com/cricketcraft/ftbisland/commands/TeleportIslandCommand.java +++ b/src/main/java/com/cricketcraft/ftbisland/commands/TeleportIslandCommand.java @@ -2,6 +2,7 @@ import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; import com.cricketcraft.ftbisland.FTBIslands; @@ -13,30 +14,29 @@ public class TeleportIslandCommand extends CommandLM { public TeleportIslandCommand() { - super("island_teleport", CommandLevel.OP); + super("island_tp", CommandLevel.ALL); } @Override public String getCommandUsage(ICommandSender ics) { - return "/" + this.getCommandName() + " "; - } - - @Override - public Boolean getUsername(String[] args, int i) { - return i == 1 ? Boolean.TRUE : null; + return "/" + this.getCommandName() + " "; } @Override public String[] getTabStrings(ICommandSender ics, String[] args, int i) throws CommandException { return i == 0 ? FTBIslands.getIslandStorage() .getContainer() - .getAllIslandNames() : super.getTabStrings(ics, args, i); + .getIslandNames() : null; } @Override public IChatComponent onCommand(ICommandSender iCommandSender, String[] strings) throws CommandException { - checkArgs(strings, 2); - IslandUtils.joinIsland(strings[0], getPlayer(iCommandSender, strings[1])); - return FTBIslands.mod.chatComponent("cmd.tp_island", strings[0]); + checkArgs(strings, 1); + IslandUtils.StatusCode status = IslandUtils + .teleportToIsland(strings[0], getCommandSenderAsPlayer(iCommandSender)); + if (status != IslandUtils.StatusCode.SUCCESS) { + return error(new ChatComponentText(status.getMessage())); + } + return new ChatComponentText(String.format("Teleported to island %s", strings[0])); } } diff --git a/src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminCreateCommand.java b/src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminCreateCommand.java new file mode 100644 index 0000000..5cea93a --- /dev/null +++ b/src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminCreateCommand.java @@ -0,0 +1,46 @@ +package com.cricketcraft.ftbisland.commands.admin; + +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.IChatComponent; + +import com.cricketcraft.ftbisland.FTBIslands; +import com.cricketcraft.ftbisland.IslandUtils; + +import ftb.lib.api.cmd.CommandLM; +import ftb.lib.api.cmd.CommandLevel; + +public class AdminCreateCommand extends CommandLM { + + public AdminCreateCommand() { + super("island_admin_create", CommandLevel.OP); + } + + @Override + public String getCommandUsage(ICommandSender ics) { + return String.format("/%s ", this.commandName); + } + + @Override + public String[] getTabStrings(ICommandSender ics, String[] args, int i) throws CommandException { + return i == 0 ? FTBIslands.getIslandStorage() + .getContainer() + .getIslandNames() : super.getTabStrings(ics, args, i); + } + + @Override + public Boolean getUsername(String[] args, int i) { + return i == 1 ? Boolean.TRUE : null; + } + + @Override + public IChatComponent onCommand(ICommandSender ics, String[] args) throws CommandException { + checkArgs(args, 2); + IslandUtils.StatusCode status = IslandUtils.createIsland(args[0], getPlayer(ics, args[1]), true); + if (status != IslandUtils.StatusCode.SUCCESS) { + return error(new ChatComponentText(status.getMessage())); + } + return new ChatComponentText(String.format("Island %s for user %s successfully created", args[0], args[1])); + } +} diff --git a/src/main/java/com/cricketcraft/ftbisland/commands/JoinIslandCommand.java b/src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminDeleteCommand.java similarity index 53% rename from src/main/java/com/cricketcraft/ftbisland/commands/JoinIslandCommand.java rename to src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminDeleteCommand.java index 7c9c6ac..75d118a 100644 --- a/src/main/java/com/cricketcraft/ftbisland/commands/JoinIslandCommand.java +++ b/src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminDeleteCommand.java @@ -1,7 +1,8 @@ -package com.cricketcraft.ftbisland.commands; +package com.cricketcraft.ftbisland.commands.admin; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; import com.cricketcraft.ftbisland.FTBIslands; @@ -10,28 +11,31 @@ import ftb.lib.api.cmd.CommandLM; import ftb.lib.api.cmd.CommandLevel; -public class JoinIslandCommand extends CommandLM { +public class AdminDeleteCommand extends CommandLM { - public JoinIslandCommand() { - super("island_join", CommandLevel.ALL); + public AdminDeleteCommand() { + super("island_admin_delete", CommandLevel.OP); } @Override public String getCommandUsage(ICommandSender ics) { - return "/" + this.getCommandName() + " "; + return String.format("/%s ", this.commandName); } @Override public String[] getTabStrings(ICommandSender ics, String[] args, int i) throws CommandException { return i == 0 ? FTBIslands.getIslandStorage() .getContainer() - .getAllIslandNames() : null; + .getIslandNames() : null; } @Override public IChatComponent onCommand(ICommandSender iCommandSender, String[] strings) throws CommandException { checkArgs(strings, 1); - IslandUtils.joinIsland(strings[0], getCommandSenderAsPlayer(iCommandSender)); - return FTBIslands.mod.chatComponent("cmd.join_success", strings[0]); + IslandUtils.StatusCode status = IslandUtils.deleteIsland(strings[0], null, true); + if (status != IslandUtils.StatusCode.SUCCESS) { + return error(new ChatComponentText(status.getMessage())); + } + return new ChatComponentText(String.format("Successfully deleted %s", strings[0])); } } diff --git a/src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminRenameCommand.java b/src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminRenameCommand.java new file mode 100644 index 0000000..bb46e66 --- /dev/null +++ b/src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminRenameCommand.java @@ -0,0 +1,42 @@ +package com.cricketcraft.ftbisland.commands.admin; + +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.IChatComponent; + +import com.cricketcraft.ftbisland.FTBIslands; +import com.cricketcraft.ftbisland.IslandUtils; + +import ftb.lib.api.cmd.CommandLM; +import ftb.lib.api.cmd.CommandLevel; + +public class AdminRenameCommand extends CommandLM { + + public AdminRenameCommand() { + super("island_admin_rename", CommandLevel.OP); + } + + @Override + public String getCommandUsage(ICommandSender ics) { + return String.format("/%s ", this.getCommandName()); + } + + @Override + public String[] getTabStrings(ICommandSender ics, String[] args, int i) throws CommandException { + return i == 0 ? FTBIslands.getIslandStorage() + .getContainer() + .getIslandNames() : null; + } + + @Override + public IChatComponent onCommand(ICommandSender iCommandSender, String[] strings) throws CommandException { + checkArgs(strings, 2); + IslandUtils.StatusCode status = IslandUtils.renameIsland(strings[0], strings[1], null, true); + if (status != IslandUtils.StatusCode.SUCCESS) { + return error(new ChatComponentText(status.getMessage())); + } + return new ChatComponentText(String.format("Successfully renamed %s to %s", strings[0], strings[1])); + } + +} diff --git a/src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminTeleportCommand.java b/src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminTeleportCommand.java new file mode 100644 index 0000000..d28d321 --- /dev/null +++ b/src/main/java/com/cricketcraft/ftbisland/commands/admin/AdminTeleportCommand.java @@ -0,0 +1,46 @@ +package com.cricketcraft.ftbisland.commands.admin; + +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.IChatComponent; + +import com.cricketcraft.ftbisland.FTBIslands; +import com.cricketcraft.ftbisland.IslandUtils; + +import ftb.lib.api.cmd.CommandLM; +import ftb.lib.api.cmd.CommandLevel; + +public class AdminTeleportCommand extends CommandLM { + + public AdminTeleportCommand() { + super("island_admin_tp", CommandLevel.OP); + } + + @Override + public String getCommandUsage(ICommandSender ics) { + return String.format("/%s ", this.commandName); + } + + @Override + public Boolean getUsername(String[] args, int i) { + return i == 1 ? Boolean.TRUE : null; + } + + @Override + public String[] getTabStrings(ICommandSender ics, String[] args, int i) throws CommandException { + return i == 0 ? FTBIslands.getIslandStorage() + .getContainer() + .getIslandNames() : super.getTabStrings(ics, args, i); + } + + @Override + public IChatComponent onCommand(ICommandSender iCommandSender, String[] strings) throws CommandException { + checkArgs(strings, 2); + IslandUtils.StatusCode status = IslandUtils.teleportToIsland(strings[0], getPlayer(iCommandSender, strings[1])); + if (status != IslandUtils.StatusCode.SUCCESS) { + return error(new ChatComponentText(status.getMessage())); + } + return new ChatComponentText(String.format("Teleported %s to island %s", strings[1], strings[0])); + } +} diff --git a/src/main/java/com/cricketcraft/ftbisland/model/IslandContainer.java b/src/main/java/com/cricketcraft/ftbisland/model/IslandContainer.java index 59de39e..e8b5b3b 100644 --- a/src/main/java/com/cricketcraft/ftbisland/model/IslandContainer.java +++ b/src/main/java/com/cricketcraft/ftbisland/model/IslandContainer.java @@ -1,9 +1,6 @@ package com.cricketcraft.ftbisland.model; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.UUID; +import java.util.*; public class IslandContainer { @@ -29,7 +26,7 @@ public void incrementIslandsCreated(int dim) { islandsCreated.merge(dim, 1, Integer::sum); } - public Optional getIslandByName(String name) { + public Optional getIsland(String name) { return this.islands.stream() .filter( island -> island.getName() @@ -38,7 +35,7 @@ public Optional getIslandByName(String name) { } public boolean doesIslandExist(String name) { - return this.getIslandByName(name) + return this.getIsland(name) .isPresent(); } @@ -50,7 +47,25 @@ public long islandsOwnedByUser(UUID owner) { .count(); } - public String[] getAllIslandNames() { + public Island[] getIslands(UUID owner) { + return this.islands.stream() + .filter( + island -> island.getOwner() + .equals(owner)) + .toArray(Island[]::new); + } + + public String[] getIslandNames(UUID owner) { + Island[] ownerIslands = this.getIslands(owner); + if (ownerIslands.length == 0) { + return new String[0]; + } + return Arrays.stream(ownerIslands) + .map(Island::getName) + .toArray(String[]::new); + } + + public String[] getIslandNames() { return this.islands.stream() .map(Island::getName) .toArray(String[]::new); diff --git a/src/main/resources/assets/ftbi/lang/en_US.lang b/src/main/resources/assets/ftbi/lang/en_US.lang deleted file mode 100644 index 047e28d..0000000 --- a/src/main/resources/assets/ftbi/lang/en_US.lang +++ /dev/null @@ -1,12 +0,0 @@ -ftbi.cmd.tp_island=Teleported to island %s -ftbi.cmd.create_exists=Couldn't create island %s, as it already exists -ftbi.cmd.create_success=Island %s successfully created -ftbi.cmd.create_fail=Failed to create island %s -ftbi.cmd.delete_not_exist=Couldn't delete island %s, as it doesn't exist -ftbi.cmd.delete_success=Island %s successfully deleted -ftbi.cmd.join_success=Joined island %s successfully -ftbi.cmd.rename_new_exists=Couldn't rename island to %s, as it already exists -ftbi.cmd.rename_old_not_exist=Couldn't rename island %s, as it doesn't exist -ftbi.cmd.rename_success=Island %s sucessfully renamed to %s -ftbi.cmd.setspawn_not_exist=Couldn't set the spawn of island %s, as the island doesn't exist -ftbi.cmd.setspawn_success=Sucessfully moved the spawn of island %s to %d %d %d