From 123569adbb8c614c62739729279c3c1716d99322 Mon Sep 17 00:00:00 2001 From: SuperRonanCraft Date: Sat, 20 Mar 2021 02:33:38 -0400 Subject: [PATCH] new edit sub commands --- pom.xml | 2 +- .../player/commands/types/CmdEdit.java | 213 +++++++++++++++--- .../BetterRTP/player/rtp/RTP.java | 2 +- .../BetterRTP/references/file/Messages.java | 12 + src/main/resources/lang/chs.yml | 3 + src/main/resources/lang/cht.yml | 5 +- src/main/resources/lang/cs.yml | 3 + src/main/resources/lang/du.yml | 5 +- src/main/resources/lang/en.yml | 5 +- src/main/resources/lang/es.yml | 3 + src/main/resources/lang/fr.yml | 3 + src/main/resources/lang/ja.yml | 5 +- src/main/resources/lang/pl.yml | 5 +- src/main/resources/lang/ro.yml | 3 + src/main/resources/lang/ru.yml | 5 +- src/main/resources/plugin.yml | 2 +- 16 files changed, 237 insertions(+), 39 deletions(-) diff --git a/pom.xml b/pom.xml index eb1d9bc..c22cb9b 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ me.SuperRonanCraft BetterRTP jar - 3.0.5 + 3.0.6 1.8 diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdEdit.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdEdit.java index 3d30632..4c51e3d 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdEdit.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdEdit.java @@ -6,7 +6,9 @@ import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand; import me.SuperRonanCraft.BetterRTP.references.worlds.WORLD_TYPE; import org.bukkit.Bukkit; +import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.block.Block; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; @@ -29,9 +31,9 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds case WORLD: if (args.length >= 5) { for (World world : Bukkit.getWorlds()) { - if (world.getName().toLowerCase().startsWith(args[2].toLowerCase())) { + if (world.getName().startsWith(args[2])) { for (RTP_CMD_EDIT_SUB sub_cmd : RTP_CMD_EDIT_SUB.values()) - if (isAllowedAccess(cmd, sub_cmd) && sub_cmd.name().toLowerCase().startsWith(args[3].toLowerCase())) { + if (sub_cmd.name().toLowerCase().startsWith(args[3].toLowerCase())) { editWorld(sendi, sub_cmd, args[4], args[2]); return; } @@ -39,19 +41,47 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds return; } } - BetterRTP.getInstance().getText().getNotExist(sendi, label); + BetterRTP.getInstance().getText().getNotExist(sendi, args[2]); return; } usage(sendi, label, cmd); return; case DEFAULT: for (RTP_CMD_EDIT_SUB sub_cmd : RTP_CMD_EDIT_SUB.values()) - if (isAllowedAccess(cmd, sub_cmd) && sub_cmd.name().toLowerCase().startsWith(args[2].toLowerCase())) { + if (sub_cmd.name().toLowerCase().startsWith(args[2].toLowerCase())) { editDefault(sendi, sub_cmd, args[3]); return; } usage(sendi, label, cmd); return; + case WORLD_TYPE: + for (World world : Bukkit.getWorlds()) { + if (world.getName().startsWith(args[2])) { + editWorldtype(sendi, args[2], args[3]); + //usage(sendi, label, cmd); + return; + } + } + BetterRTP.getInstance().getText().getNotExist(sendi, args[2]); + return; + case OVERRIDE: + for (World world : Bukkit.getWorlds()) { + if (world.getName().startsWith(args[2])) { + editOverride(sendi, args[2], args[3]); + //usage(sendi, label, cmd); + return; + } + } + BetterRTP.getInstance().getText().getNotExist(sendi, args[2]); + return; + case BLACKLISTEDBLOCKS: + if (args[2].equalsIgnoreCase("add")) { + editBlacklisted(sendi, args[3], true); + } else if (args[2].equalsIgnoreCase("remove")) { + editBlacklisted(sendi, args[3], false); + } else + usage(sendi, label, cmd); + return; } } } else if (args.length >= 2) { @@ -110,7 +140,7 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds } private void editDefault(CommandSender sendi, RTP_CMD_EDIT_SUB cmd, String val) { - Object value = val; + Object value; try { value = cmd.getResult(val); } catch (Exception e) { @@ -133,8 +163,110 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds } } + private void editWorldtype(CommandSender sendi, String world, String val) { + //sendi.sendMessage("Editting worldtype for world " + world + " to " + val); + WORLD_TYPE type; + try { + type = WORLD_TYPE.valueOf(val.toUpperCase()); + } catch (Exception e) { + //e.printStackTrace(); + BetterRTP.getInstance().getText().getEditError(sendi); + return; + } + + FileBasics.FILETYPE file = FileBasics.FILETYPE.CONFIG; + YamlConfiguration config = file.getConfig(); + + List> world_map = config.getMapList("WorldType"); + List> removeList = new ArrayList<>(); + for (Map m : world_map) { + for (Map.Entry entry : m.entrySet()) { + if (entry.getKey().equals(world)) + removeList.add(m); + } + } + for (Map o : removeList) + world_map.remove(o); + Map newIndex = new HashMap<>(); + newIndex.put(world, type.name()); + world_map.add(newIndex); + config.set("WorldType", world_map); + + try { + config.save(file.getFile()); + BetterRTP.getInstance().getRTP().load(); + BetterRTP.getInstance().getText().getEditSet(sendi, RTP_CMD_EDIT.WORLD_TYPE.name(), val); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void editOverride(CommandSender sendi, String world, String val) { + + FileBasics.FILETYPE file = FileBasics.FILETYPE.CONFIG; + YamlConfiguration config = file.getConfig(); + + List> world_map = config.getMapList("Overrides"); + List> removeList = new ArrayList<>(); + for (Map m : world_map) { + for (Map.Entry entry : m.entrySet()) { + if (entry.getKey().equals(world)) + removeList.add(m); + } + } + for (Map o : removeList) + world_map.remove(o); + if (!val.equals("REMOVE_OVERRIDE")) { + Map newIndex = new HashMap<>(); + newIndex.put(world, val); + world_map.add(newIndex); + } else { + val = "(removed override)"; + } + config.set("Overrides", world_map); + + try { + config.save(file.getFile()); + BetterRTP.getInstance().getRTP().load(); + BetterRTP.getInstance().getText().getEditSet(sendi, RTP_CMD_EDIT.OVERRIDE.name(), val); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void editBlacklisted(CommandSender sendi, String block, boolean add) { + + FileBasics.FILETYPE file = FileBasics.FILETYPE.CONFIG; + YamlConfiguration config = file.getConfig(); + + List world_map = config.getStringList("BlacklistedBlocks"); + List removeList = new ArrayList<>(); + for (String m : world_map) { + if (m.equals(block)) { + removeList.add(m); + } + } + for (String o : removeList) + world_map.remove(o); + if (add) { + world_map.add(block); + } else { + block = "(removed " + block + ")"; + } + config.set("BlacklistedBlocks", world_map); + + try { + config.save(file.getFile()); + BetterRTP.getInstance().getRTP().load(); + BetterRTP.getInstance().getText().getEditSet(sendi, RTP_CMD_EDIT.BLACKLISTEDBLOCKS.name(), block); + } catch (IOException e) { + e.printStackTrace(); + } + } + //rtp edit default //rtp edit world [] + //rtp edit worldtype @Override public List tabComplete(CommandSender sendi, String[] args) { List list = new ArrayList<>(); @@ -146,6 +278,8 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds for (RTP_CMD_EDIT cmd : RTP_CMD_EDIT.values()) if (cmd.name().equalsIgnoreCase(args[1])) { switch (cmd) { + case WORLD_TYPE: + case OVERRIDE: case WORLD: //List all worlds for (World world : Bukkit.getWorlds()) if (world.getName().toLowerCase().startsWith(args[2].toLowerCase())) @@ -153,6 +287,11 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds break; case DEFAULT: list.addAll(tabCompleteSub(args, cmd)); + break; + case BLACKLISTEDBLOCKS: + list.add("add"); + list.add("remove"); + break; } } } else if (args.length == 4) { @@ -167,6 +306,31 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds else if (args[2].equalsIgnoreCase(RTP_CMD_EDIT_SUB.CENTER_Z.name())) list.add(String.valueOf(((Player) sendi).getLocation().getBlockZ())); break; + case WORLD_TYPE: + for (WORLD_TYPE _type : WORLD_TYPE.values()) + list.add(_type.name()); + break; + case OVERRIDE: + for (World world : Bukkit.getWorlds()) + if (world.getName().toLowerCase().startsWith(args[2].toLowerCase())) + list.add(world.getName()); + list.add("REMOVE_OVERRIDE"); + break; + case BLACKLISTEDBLOCKS: + if (args[2].equalsIgnoreCase("add")) { + for (Material block : Material.values()) { + if (list.size() > 20) + break; + if (block.name().startsWith(args[3].toUpperCase())) + list.add(block.name()); + } + } else if (args[2].equalsIgnoreCase("remove")) { + for (String block : BetterRTP.getInstance().getRTP().blockList) { + if (block.startsWith(args[3])) + list.add(block); + } + } + break; } } else if (args.length == 5) { for (RTP_CMD_EDIT cmd : RTP_CMD_EDIT.values()) @@ -185,20 +349,12 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds List list = new ArrayList<>(); for (RTP_CMD_EDIT_SUB sub_cmd : RTP_CMD_EDIT_SUB.values()) { - if (isAllowedAccess(cmd, sub_cmd) && sub_cmd.name().toLowerCase().startsWith(args[args.length - 1].toLowerCase())) + if (sub_cmd.name().toLowerCase().startsWith(args[args.length - 1].toLowerCase())) list.add(sub_cmd.name().toLowerCase()); } return list; } - private boolean isAllowedAccess(RTP_CMD_EDIT cmd, RTP_CMD_EDIT_SUB sub) { - //Check if this sub command is allowed - for (RTP_CMD_EDIT cmd_checking : sub.getAllowed()) - if (cmd_checking == cmd) - return true; - return false; - } - @Override public boolean permission(CommandSender sendi) { return BetterRTP.getInstance().getPerms().getEdit(sendi); @@ -211,6 +367,12 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds BetterRTP.getInstance().getText().getUsageEditDefault(sendi, label); break; case WORLD: BetterRTP.getInstance().getText().getUsageEditWorld(sendi, label); break; + case WORLD_TYPE: + BetterRTP.getInstance().getText().getUsageWorldtype(sendi, label); break; + case OVERRIDE: + BetterRTP.getInstance().getText().getUsageOverride(sendi, label); break; + case BLACKLISTEDBLOCKS: + BetterRTP.getInstance().getText().getUsageBlacklistedBlocks(sendi, label); break; } else BetterRTP.getInstance().getText().getUsageEdit(sendi, label); @@ -222,25 +384,22 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds } enum RTP_CMD_EDIT { - WORLD, DEFAULT, WORLD_TYPE + WORLD, DEFAULT, WORLD_TYPE, OVERRIDE, BLACKLISTEDBLOCKS } enum RTP_CMD_EDIT_SUB { - CENTER_X("CenterX", "INT", null), - CENTER_Z("CenterZ", "INT", null), - MAX("MaxRadius", "INT", null), - MIN("MinRadius", "INT", null), - USEWORLDBORDER("UseWorldBorder", "BOL", null), - WORLDTYPE("WorldType", "WORLDTYPE", new RTP_CMD_EDIT[]{RTP_CMD_EDIT.WORLD_TYPE}); + CENTER_X("CenterX", "INT"), + CENTER_Z("CenterZ", "INT"), + MAX("MaxRadius", "INT"), + MIN("MinRadius", "INT"), + USEWORLDBORDER("UseWorldBorder", "BOL"); private final String type; private final String str; - private final RTP_CMD_EDIT[] allowed; - RTP_CMD_EDIT_SUB(String str, String type, RTP_CMD_EDIT[] allowed_cmds) { + RTP_CMD_EDIT_SUB(String str, String type) { this.str = str; this.type = type; - this.allowed = allowed_cmds; } String get() { @@ -256,11 +415,5 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds return WORLD_TYPE.valueOf(input).name(); return null; } - - RTP_CMD_EDIT[] getAllowed() { - if (this.allowed == null) - return new RTP_CMD_EDIT[]{RTP_CMD_EDIT.WORLD, RTP_CMD_EDIT.DEFAULT}; - return allowed; - } } } \ No newline at end of file diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java index ee294cd..89e80b6 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java @@ -23,7 +23,7 @@ public class RTP { public HashMap customWorlds = new HashMap<>(); public HashMap overriden = new HashMap<>(); public WorldDefault defaultWorld = new WorldDefault(); - List disabledWorlds, blockList; + public List disabledWorlds, blockList; int maxAttempts, delayTime; boolean cancelOnMove, cancelOnDamage; public HashMap world_type = new HashMap<>(); diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/file/Messages.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/file/Messages.java index 7df41ff..3910af4 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/file/Messages.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/file/Messages.java @@ -223,6 +223,18 @@ public class Messages { sms(sendi, getLang().getString(preU + "Edit.World").replaceAll("%command%", cmd)); } + public void getUsageWorldtype(CommandSender sendi, String cmd) { + sms(sendi, getLang().getString(preU + "Edit.Worldtype").replaceAll("%command%", cmd)); + } + + public void getUsageOverride(CommandSender sendi, String cmd) { + sms(sendi, getLang().getString(preU + "Edit.Override").replaceAll("%command%", cmd)); + } + + public void getUsageBlacklistedBlocks(CommandSender sendi, String cmd) { + sms(sendi, getLang().getString(preU + "Edit.BlacklistedBlocks").replaceAll("%command%", cmd)); + } + // Not Found public void error(CommandSender sendi) { sms(sendi, "&cERROR &7Seems like your Administrator did not update their language file!"); diff --git a/src/main/resources/lang/chs.yml b/src/main/resources/lang/chs.yml index e9ccacb..6ad5378 100644 --- a/src/main/resources/lang/chs.yml +++ b/src/main/resources/lang/chs.yml @@ -55,3 +55,6 @@ Usage: Base: '&c用法&7:/%command% edit [参数...]' Default: '&c用法&7:/%command% edit default <值>' World: '&c用法&7:/%command% edit world <值>' +# Worldtype: '&cUsage&7: /%command% edit world_type ' +# Override: '&cUsage&7: /%command% edit override ' +# BlacklistedBlocks: '&cUsage&7: /%command% edit blacklistedblocks ' diff --git a/src/main/resources/lang/cht.yml b/src/main/resources/lang/cht.yml index 45ae826..ed08411 100644 --- a/src/main/resources/lang/cht.yml +++ b/src/main/resources/lang/cht.yml @@ -54,4 +54,7 @@ Usage: # Edit: # Base: '&cUsage&7: /%command% edit [args...]' # Default: '&cUsage&7: /%command% edit default ' -# World: '&cUsage&7: /%command% edit world ' \ No newline at end of file +# World: '&cUsage&7: /%command% edit world ' +# Worldtype: '&cUsage&7: /%command% edit world_type ' +# Override: '&cUsage&7: /%command% edit override ' +# BlacklistedBlocks: '&cUsage&7: /%command% edit blacklistedblocks ' \ No newline at end of file diff --git a/src/main/resources/lang/cs.yml b/src/main/resources/lang/cs.yml index ab998a0..0fe2553 100644 --- a/src/main/resources/lang/cs.yml +++ b/src/main/resources/lang/cs.yml @@ -55,3 +55,6 @@ Usage: Base: '&cPoužití&7: /%command% edit [hodnoty...]' Default: '&cPoužití&7: /%command% edit default ' World: '&cPoužití&7: /%command% edit world ' +# Worldtype: '&cUsage&7: /%command% edit world_type ' +# Override: '&cUsage&7: /%command% edit override ' +# BlacklistedBlocks: '&cUsage&7: /%command% edit blacklistedblocks ' diff --git a/src/main/resources/lang/du.yml b/src/main/resources/lang/du.yml index 2bfa18f..be0647c 100644 --- a/src/main/resources/lang/du.yml +++ b/src/main/resources/lang/du.yml @@ -54,4 +54,7 @@ Usage: # Edit: # Base: '&cUsage&7: /%command% edit [args...]' # Default: '&cUsage&7: /%command% edit default ' -# World: '&cUsage&7: /%command% edit world ' \ No newline at end of file +# World: '&cUsage&7: /%command% edit world ' +# Worldtype: '&cUsage&7: /%command% edit world_type ' +# Override: '&cUsage&7: /%command% edit override ' +# BlacklistedBlocks: '&cUsage&7: /%command% edit blacklistedblocks ' \ No newline at end of file diff --git a/src/main/resources/lang/en.yml b/src/main/resources/lang/en.yml index 1c036dd..be40dbc 100644 --- a/src/main/resources/lang/en.yml +++ b/src/main/resources/lang/en.yml @@ -54,4 +54,7 @@ Usage: Edit: Base: '&cUsage&7: /%command% edit [args...]' Default: '&cUsage&7: /%command% edit default ' - World: '&cUsage&7: /%command% edit world ' \ No newline at end of file + World: '&cUsage&7: /%command% edit world ' + Worldtype: '&cUsage&7: /%command% edit world_type ' + Override: '&cUsage&7: /%command% edit override ' + BlacklistedBlocks: '&cUsage&7: /%command% edit blacklistedblocks ' \ No newline at end of file diff --git a/src/main/resources/lang/es.yml b/src/main/resources/lang/es.yml index 297ef53..708055c 100644 --- a/src/main/resources/lang/es.yml +++ b/src/main/resources/lang/es.yml @@ -55,3 +55,6 @@ Usage: Base: '&cUso&7: /%command% edit [args...]' Default: '&cUso&7: /%command% edit default ' World: '&cUso&7: /%command% edit world ' +# Worldtype: '&cUsage&7: /%command% edit world_type ' +# Override: '&cUsage&7: /%command% edit override ' +# BlacklistedBlocks: '&cUsage&7: /%command% edit blacklistedblocks ' diff --git a/src/main/resources/lang/fr.yml b/src/main/resources/lang/fr.yml index 730d4e4..cb101fa 100644 --- a/src/main/resources/lang/fr.yml +++ b/src/main/resources/lang/fr.yml @@ -55,3 +55,6 @@ Usage: Base: '&cUtilisation&7: /%command% edit [args...]' Default: '&cUtilisation&7: /%command% edit default ' World: '&cUtilisation&7: /%command% edit world ' +# Worldtype: '&cUsage&7: /%command% edit world_type ' +# Override: '&cUsage&7: /%command% edit override ' +# BlacklistedBlocks: '&cUsage&7: /%command% edit blacklistedblocks ' \ No newline at end of file diff --git a/src/main/resources/lang/ja.yml b/src/main/resources/lang/ja.yml index 46674d9..dd1ca71 100644 --- a/src/main/resources/lang/ja.yml +++ b/src/main/resources/lang/ja.yml @@ -54,4 +54,7 @@ Usage: # Edit: # Base: '&cUsage&7: /%command% edit [args...]' # Default: '&cUsage&7: /%command% edit default ' -# World: '&cUsage&7: /%command% edit world ' \ No newline at end of file +# World: '&cUsage&7: /%command% edit world ' +# Worldtype: '&cUsage&7: /%command% edit world_type ' +# Override: '&cUsage&7: /%command% edit override ' +# BlacklistedBlocks: '&cUsage&7: /%command% edit blacklistedblocks ' \ No newline at end of file diff --git a/src/main/resources/lang/pl.yml b/src/main/resources/lang/pl.yml index dab04e4..74c945c 100644 --- a/src/main/resources/lang/pl.yml +++ b/src/main/resources/lang/pl.yml @@ -54,4 +54,7 @@ Usage: Edit: Base: '&cUsage&7: /%command% edit [args...]' Default: '&cUsage&7: /%command% edit default ' - World: '&cUsage&7: /%command% edit world ' \ No newline at end of file + World: '&cUsage&7: /%command% edit world ' +# Worldtype: '&cUsage&7: /%command% edit world_type ' +# Override: '&cUsage&7: /%command% edit override ' +# BlacklistedBlocks: '&cUsage&7: /%command% edit blacklistedblocks ' \ No newline at end of file diff --git a/src/main/resources/lang/ro.yml b/src/main/resources/lang/ro.yml index 5b5384f..153ce6a 100644 --- a/src/main/resources/lang/ro.yml +++ b/src/main/resources/lang/ro.yml @@ -54,3 +54,6 @@ Usage: Base: '&cFolosire&7: /%command% edit [args...]' Default: '&cFolosire&7: /%command% edit default ' World: '&cFolosire&7: /%command% edit world ' +# Worldtype: '&cUsage&7: /%command% edit world_type ' +# Override: '&cUsage&7: /%command% edit override ' +# BlacklistedBlocks: '&cUsage&7: /%command% edit blacklistedblocks ' diff --git a/src/main/resources/lang/ru.yml b/src/main/resources/lang/ru.yml index 4d81aa9..d524c8c 100644 --- a/src/main/resources/lang/ru.yml +++ b/src/main/resources/lang/ru.yml @@ -54,4 +54,7 @@ Usage: Edit: Base: '&cUsage&7: /%command% edit [аргументы...]' Default: '&cUsage&7: /%command% edit default ' - World: '&cUsage&7: /%command% edit world ' \ No newline at end of file + World: '&cUsage&7: /%command% edit world ' +# Worldtype: '&cUsage&7: /%command% edit world_type ' +# Override: '&cUsage&7: /%command% edit override ' +# BlacklistedBlocks: '&cUsage&7: /%command% edit blacklistedblocks ' \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index be18af8..0f7022a 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ main: me.SuperRonanCraft.BetterRTP.BetterRTP -version: '3.0.5' +version: '3.0.6' name: BetterRTP author: SuperRonanCraft softdepend: