edit command update + world type not set warning message

This commit is contained in:
SuperRonanCraft 2021-03-19 12:00:24 -04:00
parent e53ed64614
commit d3d9867d9f
3 changed files with 51 additions and 26 deletions

View File

@ -4,6 +4,7 @@ import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandHelpable;
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.World;
import org.bukkit.command.CommandSender;
@ -29,9 +30,9 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds
if (args.length >= 5) {
for (World world : Bukkit.getWorlds()) {
if (world.getName().toLowerCase().startsWith(args[2].toLowerCase())) {
for (RTP_CMD_EDIT_SUB cmde : RTP_CMD_EDIT_SUB.values())
if (cmde.name().toLowerCase().startsWith(args[3].toLowerCase())) {
editWorld(sendi, cmde, args[4], 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())) {
editWorld(sendi, sub_cmd, args[4], args[2]);
return;
}
usage(sendi, label, cmd);
@ -44,9 +45,9 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds
usage(sendi, label, cmd);
return;
case DEFAULT:
for (RTP_CMD_EDIT_SUB cmde : RTP_CMD_EDIT_SUB.values())
if (cmde.name().toLowerCase().startsWith(args[2].toLowerCase())) {
editDefault(sendi, cmde, args[3]);
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())) {
editDefault(sendi, sub_cmd, args[3]);
return;
}
usage(sendi, label, cmd);
@ -141,7 +142,7 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds
for (RTP_CMD_EDIT cmd : RTP_CMD_EDIT.values())
if (cmd.name().toLowerCase().startsWith(args[1].toLowerCase()))
list.add(cmd.name().toLowerCase());
} else if (args.length == 3) {
} else if (args.length == 3) { //rtp edit <sub_cmd> <type>
for (RTP_CMD_EDIT cmd : RTP_CMD_EDIT.values())
if (cmd.name().equalsIgnoreCase(args[1])) {
switch (cmd) {
@ -151,7 +152,7 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds
list.add(world.getName());
break;
case DEFAULT:
list.addAll(tabCompleteSub(args));
list.addAll(tabCompleteSub(args, cmd));
}
}
} else if (args.length == 4) {
@ -159,7 +160,7 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds
if (cmd.name().equalsIgnoreCase(args[1]))
switch (cmd) {
case WORLD:
list.addAll(tabCompleteSub(args)); break;
list.addAll(tabCompleteSub(args, cmd)); break;
case DEFAULT:
if (args[2].equalsIgnoreCase(RTP_CMD_EDIT_SUB.CENTER_X.name()))
list.add(String.valueOf(((Player) sendi).getLocation().getBlockX()));
@ -180,15 +181,24 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds
return list;
}
private List<String> tabCompleteSub(String[] args) {
private List<String> tabCompleteSub(String[] args, RTP_CMD_EDIT cmd) {
List<String> list = new ArrayList<>();
for (RTP_CMD_EDIT_SUB cmd : RTP_CMD_EDIT_SUB.values()) {
if (cmd.name().toLowerCase().startsWith(args[args.length - 1].toLowerCase()))
list.add(cmd.name().toLowerCase());
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()))
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);
@ -212,22 +222,25 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds
}
enum RTP_CMD_EDIT {
WORLD, DEFAULT
WORLD, DEFAULT, WORLD_TYPE
}
enum RTP_CMD_EDIT_SUB {
CENTER_X("CenterX", "INT"),
CENTER_Z("CenterZ", "INT"),
MAX("MaxRadius", "INT"),
MIN("MinRadius", "INT"),
USEWORLDBORDER("UseWorldBorder", "BOL");
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});
private String type;
private String str;
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_SUB(String str, String type, RTP_CMD_EDIT[] allowed_cmds) {
this.str = str;
this.type = type;
this.allowed = allowed_cmds;
}
String get() {
@ -239,7 +252,15 @@ public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds
return Integer.parseInt(input);
else if (this.type.equalsIgnoreCase("BOL"))
return Boolean.valueOf(input);
else if (this.type.equalsIgnoreCase("WORLDTYPE")) //WILL CAUSE ERROR IF INCORRECT
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;
}
}
}

View File

@ -129,9 +129,16 @@ public class RTP {
} else
pWorld.setup(defaultWorld, biomes, personal);
//World type
WORLD_TYPE world_type = WORLD_TYPE.NORMAL; //World rtp type
WORLD_TYPE world_type; //World rtp type
if (this.world_type.containsKey(world_name))
world_type = this.world_type.get(world_name);
else {
world_type = WORLD_TYPE.NORMAL;
this.world_type.put(world_name, world_type); //Defaults this so the error message isn't spammed
getPl().getLogger().warning("Seems like the world `" + world_name + "` does not have a `WorldType` declared. " +
"Please add/fix this in the config.yml file! " +
"This world will be treated as an overworld!");
}
pWorld.setWorldtype(world_type);
return pWorld;
}

View File

@ -3,13 +3,10 @@ package me.SuperRonanCraft.BetterRTP.player.rtp;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.wrappers.BlockPosition;
import com.comphenix.protocol.wrappers.WrappedBlockData;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.rtp.packets.WrapperPlayServerNamedSoundEffect;
import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;