From 7d018b748fb28ef963a88d56c226d8b0669d8572 Mon Sep 17 00:00:00 2001 From: SuperRonanCraft Date: Fri, 13 Nov 2020 16:40:11 -0500 Subject: [PATCH] addons help support + api permission fix + addon subcmds for portals --- .../BetterRTPAddons/Addon.java | 10 +-- .../BetterRTPAddons/AddonsCommand.java | 30 +++++++++ .../BetterRTPAddons/AddonsHandler.java | 13 +++- .../BetterRTPAddons/Files.java | 2 +- .../SuperRonanCraft/BetterRTPAddons/Main.java | 4 ++ .../BetterRTPAddons/database/Database.java | 31 +++------- .../database/DatabaseColumn.java | 9 +++ .../flashback/AddonFlashback.java | 14 +++-- .../flashback/FlashbackDatabase.java | 50 +++++++++++---- .../flashback/FlashbackPlayer.java | 3 +- .../BetterRTPAddons/logger/AddonLogger.java | 28 +++++++++ .../BetterRTPAddons/portals/AddonPortals.java | 8 ++- .../portals/PortalsCommand.java | 37 ++++++++++- .../portals/PortalsDatabase.java | 62 ++++++++++++------- .../portals/PortalsMessages.java | 8 ++- .../portals/cmds/PortalsCommand_Create.java | 11 ++++ .../portals/cmds/PortalsCommand_Loc1.java | 11 ++++ .../portals/cmds/PortalsCommand_Loc2.java | 11 ++++ .../portals/cmds/PortalsCommands.java | 9 +++ BetterRTPAddons/src/main/resources/logger.yml | 2 + BetterRTPAddons/src/main/resources/plugin.yml | 4 ++ .../src/main/resources/portals.yml | 3 + .../BetterRTP/player/commands/Commands.java | 2 +- .../player/commands/types/CmdHelp.java | 13 ++-- .../BetterRTP/references/Permissions.java | 42 ++++++------- 25 files changed, 304 insertions(+), 113 deletions(-) create mode 100644 BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsCommand.java create mode 100644 BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/database/DatabaseColumn.java create mode 100644 BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/logger/AddonLogger.java create mode 100644 BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommand_Create.java create mode 100644 BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommand_Loc1.java create mode 100644 BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommand_Loc2.java create mode 100644 BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommands.java create mode 100644 BetterRTPAddons/src/main/resources/logger.yml diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/Addon.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/Addon.java index 3261660..f89e81d 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/Addon.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/Addon.java @@ -4,7 +4,7 @@ import org.bukkit.Bukkit; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; -public interface Addon extends Listener { +public interface Addon { //Addon will check if it can be enabled boolean isEnabled(); @@ -15,12 +15,4 @@ public interface Addon extends Listener { //Unload the addon if enabled void unload(); - default void register() { - Bukkit.getPluginManager().registerEvents(this, Main.getInstance()); - } - - default void unregister() { - HandlerList.unregisterAll(this); - } - } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsCommand.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsCommand.java new file mode 100644 index 0000000..9ab6ccd --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsCommand.java @@ -0,0 +1,30 @@ +package me.SuperRonanCraft.BetterRTPAddons; + +import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand; +import org.bukkit.command.CommandSender; + +import java.util.List; + +public class AddonsCommand implements RTPCommand { + @Override + public void execute(CommandSender sendi, String label, String[] args) { + for (AddonsHandler.Addons addon : Main.getInstance().getAddonsHandler().addons) { + sendi.sendMessage(addon.name()); + } + } + + @Override + public List tabComplete(CommandSender sendi, String[] args) { + return null; + } + + @Override + public boolean permission(CommandSender sendi) { + return true; + } + + @Override + public String getName() { + return "addons"; + } +} diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsHandler.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsHandler.java index 4950a22..703572b 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsHandler.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsHandler.java @@ -1,8 +1,13 @@ package me.SuperRonanCraft.BetterRTPAddons; +import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTPAddons.flashback.AddonFlashback; import me.SuperRonanCraft.BetterRTPAddons.interfaces.AddonInterface; +import me.SuperRonanCraft.BetterRTPAddons.logger.AddonLogger; import me.SuperRonanCraft.BetterRTPAddons.portals.AddonPortals; +import org.bukkit.Bukkit; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; import java.util.ArrayList; import java.util.List; @@ -11,6 +16,7 @@ import java.util.logging.Level; public class AddonsHandler { List addons = new ArrayList<>(); + AddonsCommand cmd = new AddonsCommand(); public void load() { for (Addons addon : addons) { @@ -24,12 +30,14 @@ public class AddonsHandler { } else { Main.getInstance().getLogger().log(Level.INFO, "Addon " + addon.name() + " was NOT enabled."); } + BetterRTP.getInstance().getCmd().registerCommand(cmd, false); } enum Addons { FLASH_BACK(new AddonFlashback()), PORTALS(new AddonPortals()), - INTERFACES(new AddonInterface()); + INTERFACES(new AddonInterface()), + LOGGER(new AddonLogger()); Addon addon; @@ -42,13 +50,12 @@ public class AddonsHandler { } void load() { - addon.register(); addon.load(); Main.getInstance().getLogger().log(Level.INFO, "Addon " + this.name() + " has been enabled!"); } void disable() { - addon.unregister(); + addon.unload(); } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/Files.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/Files.java index 265c9bf..3a0d32b 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/Files.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/Files.java @@ -23,7 +23,7 @@ public class Files { } public enum FILETYPE { - CONFIG("config"), FLASHBACK("flashback"), PORTALS("portals"), INTERFACE("interface"); + CONFIG("config"), FLASHBACK("flashback"), PORTALS("portals"), INTERFACE("interface"), LOGGER("logger"); private final String fileName; private final YamlConfiguration config = new YamlConfiguration(); diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/Main.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/Main.java index d051c20..daf2eb5 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/Main.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/Main.java @@ -20,6 +20,10 @@ public class Main extends JavaPlugin { addonsHandler.load(); } + public AddonsHandler getAddonsHandler() { + return addonsHandler; + } + public static Main getInstance() { return instance; } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/database/Database.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/database/Database.java index 9101419..d439073 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/database/Database.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/database/Database.java @@ -15,23 +15,8 @@ public abstract class Database { public String db_name; public final String table = "BRTP_Data"; - public enum COLUMNS { - UUID("uuid", "varchar(32)"), - NAME("player", "varchar(16)"), - LOCATION_OLD("location_old", "longtext"), - TIME_GOAL("time_goal", "bigint(19)"); - - public String name; - public String type; - - COLUMNS(String name, String type) { - this.name = name; - this.type = type; - } - } - - public Database(Main instance, String db_name) { - plugin = instance; + public Database(String db_name) { + plugin = Main.getInstance(); this.db_name = db_name; } @@ -63,15 +48,15 @@ public abstract class Database { //Get the layout of the database table public abstract String getTableFormat(); - public void load() { + public void load(DatabaseColumn[] columns) { connection = getSQLConnection(); try { Statement s = connection.createStatement(); s.executeUpdate(getTableFormat()); - for (COLUMNS c : COLUMNS.values()) { //Add missing columns dynamically + for (DatabaseColumn c : columns) { //Add missing columns dynamically try { String addMissingColumns = "ALTER TABLE " + table + " ADD COLUMN %column% %type%"; - s.executeUpdate(addMissingColumns.replace("%column%", c.name).replace("%type%", c.type)); + s.executeUpdate(addMissingColumns.replace("%column%", c.getName()).replace("%type%", c.getType())); } catch (SQLException e) { //e.printStackTrace(); } @@ -80,16 +65,16 @@ public abstract class Database { } catch (SQLException e) { e.printStackTrace(); } - initialize(); + initialize(columns[0]); } - private void initialize() { + private void initialize(DatabaseColumn testColumn) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = getSQLConnection(); - ps = conn.prepareStatement("SELECT * FROM " + table + " WHERE " + COLUMNS.UUID.name + " = ?"); + ps = conn.prepareStatement("SELECT * FROM " + table + " WHERE " + testColumn.getName() + " = ?"); rs = ps.executeQuery(); } catch (SQLException ex) { diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/database/DatabaseColumn.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/database/DatabaseColumn.java new file mode 100644 index 0000000..2682475 --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/database/DatabaseColumn.java @@ -0,0 +1,9 @@ +package me.SuperRonanCraft.BetterRTPAddons.database; + +public abstract interface DatabaseColumn { + + String getName(); + + String getType(); + +} diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/flashback/AddonFlashback.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/flashback/AddonFlashback.java index bf51569..ca58f29 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/flashback/AddonFlashback.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/flashback/AddonFlashback.java @@ -4,17 +4,20 @@ import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEven import me.SuperRonanCraft.BetterRTPAddons.Addon; import me.SuperRonanCraft.BetterRTPAddons.Files; import me.SuperRonanCraft.BetterRTPAddons.Main; +import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; import java.util.ArrayList; import java.util.List; //When rtp'ing, a player will be teleported back to old location after a set amount of time -public class AddonFlashback implements Addon { +public class AddonFlashback implements Addon, Listener { private Long time; - public FlashbackMessages msgs = new FlashbackMessages(); - public FlashbackDatabase database; + public final FlashbackMessages msgs = new FlashbackMessages(); + public final FlashbackDatabase database = new FlashbackDatabase(); List players = new ArrayList<>(); public boolean isEnabled() { @@ -25,8 +28,8 @@ public class AddonFlashback implements Addon { public void load() { Files.FILETYPE file = Files.FILETYPE.FLASHBACK; this.time = file.getConfig().getLong("Time"); - this.database = new FlashbackDatabase(Main.getInstance()); - this.database.load(); + this.database.load(FlashbackDatabase.Columns.values()); + Bukkit.getPluginManager().registerEvents(this, Main.getInstance()); } @Override @@ -34,6 +37,7 @@ public class AddonFlashback implements Addon { for (FlashbackPlayer fbp : players) fbp.cancel(); players.clear(); + HandlerList.unregisterAll(this); } @EventHandler diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/flashback/FlashbackDatabase.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/flashback/FlashbackDatabase.java index 64373f8..620b784 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/flashback/FlashbackDatabase.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/flashback/FlashbackDatabase.java @@ -4,6 +4,7 @@ import me.SuperRonanCraft.BetterRTPAddons.LocSerialization; import me.SuperRonanCraft.BetterRTPAddons.Main; import me.SuperRonanCraft.BetterRTPAddons.PlayerInfo; import me.SuperRonanCraft.BetterRTPAddons.database.Database; +import me.SuperRonanCraft.BetterRTPAddons.database.DatabaseColumn; import me.SuperRonanCraft.BetterRTPAddons.database.Errors; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -17,17 +18,42 @@ import java.util.logging.Level; public class FlashbackDatabase extends Database { + enum Columns implements DatabaseColumn { + UUID("uuid", "varchar(32)"), + NAME("player", "varchar(16)"), + LOCATION_OLD("location_old", "longtext"), + TIME_GOAL("time_goal", "bigint(19)"); + + private final String name; + private final String type; + + Columns(String name, String type) { + this.name = name; + this.type = type; + } + + @Override + public String getName() { + return name; + } + + @Override + public String getType() { + return type; + } + } + List playerInfos = new ArrayList<>(); - public FlashbackDatabase(Main instance){ - super(instance, "addon_flashback"); + public FlashbackDatabase(){ + super("addon_flashback"); } private final String createTable = "CREATE TABLE IF NOT EXISTS " + table + " (" + - "`" + COLUMNS.UUID.name + "` " + COLUMNS.UUID.type + " PRIMARY KEY NOT NULL," + - "`" + COLUMNS.NAME.name + "` " + COLUMNS.NAME.type + "," + - "`" + COLUMNS.LOCATION_OLD.name + "` " + COLUMNS.LOCATION_OLD.type + " NOT NULL," + - "`" + COLUMNS.TIME_GOAL.name + "` " + COLUMNS.LOCATION_OLD.type + " NOT NULL" + + "`" + Columns.UUID.name + "` " + Columns.UUID.type + " PRIMARY KEY NOT NULL," + + "`" + Columns.NAME.name + "` " + Columns.NAME.type + "," + + "`" + Columns.LOCATION_OLD.name + "` " + Columns.LOCATION_OLD.type + " NOT NULL," + + "`" + Columns.TIME_GOAL.name + "` " + Columns.LOCATION_OLD.type + " NOT NULL" + ");"; @@ -37,9 +63,9 @@ public class FlashbackDatabase extends Database { } @Override - public void load() { + public void load(DatabaseColumn[] columns) { playerInfos.clear(); - super.load(); + super.load(columns); } public PlayerInfo getPlayer(Player p) { @@ -48,12 +74,12 @@ public class FlashbackDatabase extends Database { ResultSet rs = null; try { conn = getSQLConnection(); - ps = conn.prepareStatement("SELECT * FROM " + table + " WHERE " + COLUMNS.UUID.name + " = ?"); + ps = conn.prepareStatement("SELECT * FROM " + table + " WHERE " + Columns.UUID.name + " = ?"); UUID id = p.getUniqueId(); ps.setString(1, id != null ? id.toString() : console_id); rs = ps.executeQuery(); if (rs.next()) { - Location loc = LocSerialization.getLocationFromString(rs.getString(COLUMNS.LOCATION_OLD.name)); + Location loc = LocSerialization.getLocationFromString(rs.getString(Columns.LOCATION_OLD.name)); return new PlayerInfo(p, loc); } } catch (SQLException ex) { @@ -70,8 +96,8 @@ public class FlashbackDatabase extends Database { boolean success = true; try { conn = getSQLConnection(); - ps = conn.prepareStatement("INSERT INTO " + table + "(" + COLUMNS.UUID.name + ", " + COLUMNS.LOCATION_OLD.name + ") VALUES (?, ?) " - + "ON CONFLICT(" + COLUMNS.UUID.name + ") DO UPDATE SET " + COLUMNS.LOCATION_OLD.name + " = + ?"); + ps = conn.prepareStatement("INSERT INTO " + table + "(" + Columns.UUID.name + ", " + Columns.LOCATION_OLD.name + ") VALUES (?, ?) " + + "ON CONFLICT(" + Columns.UUID.name + ") DO UPDATE SET " + Columns.LOCATION_OLD.name + " = + ?"); UUID id = p.getUniqueId(); ps.setString(1, id != null ? id.toString() : console_id); String serialLocation = LocSerialization.getStringFromLocation(oldLocation); diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/flashback/FlashbackPlayer.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/flashback/FlashbackPlayer.java index b71257a..cef50cf 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/flashback/FlashbackPlayer.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/flashback/FlashbackPlayer.java @@ -21,7 +21,8 @@ public class FlashbackPlayer { } private Runnable getTimedFlash(Long seconds) { - plugin.database.setPlayer(p, oldLoc, System.currentTimeMillis() + (seconds * 1000)); + if (plugin.database.setPlayer(p, oldLoc, System.currentTimeMillis() + (seconds * 1000))) + p.sendMessage("A Database error has occurred!"); return () -> { plugin.msgs.getWarning(p); PaperLib.teleportAsync(p, oldLoc); diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/logger/AddonLogger.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/logger/AddonLogger.java new file mode 100644 index 0000000..8d856d3 --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/logger/AddonLogger.java @@ -0,0 +1,28 @@ +package me.SuperRonanCraft.BetterRTPAddons.logger; + +import me.SuperRonanCraft.BetterRTPAddons.Addon; +import me.SuperRonanCraft.BetterRTPAddons.Files; +import me.SuperRonanCraft.BetterRTPAddons.Main; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; + +public class AddonLogger implements Addon, Listener { + + @Override + public boolean isEnabled() { + return Files.FILETYPE.LOGGER.getBoolean("Enabled"); + } + + @Override + public void load() { + Bukkit.getPluginManager().registerEvents(this, Main.getInstance()); + } + + @Override + public void unload() { + HandlerList.unregisterAll(this); + } + +} diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/AddonPortals.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/AddonPortals.java index e3b8ab4..cd7dbe6 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/AddonPortals.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/AddonPortals.java @@ -5,13 +5,15 @@ import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEven import me.SuperRonanCraft.BetterRTPAddons.Addon; import me.SuperRonanCraft.BetterRTPAddons.Files; import me.SuperRonanCraft.BetterRTPAddons.Main; +import me.SuperRonanCraft.BetterRTPAddons.flashback.FlashbackDatabase; import org.bukkit.event.EventHandler; //With a gui, a player public class AddonPortals implements Addon { public PortalsMessages msgs = new PortalsMessages(); - private PortalsDatabase database; + private final PortalsCommand cmd = new PortalsCommand(this); + private final PortalsDatabase database = new PortalsDatabase();; public boolean isEnabled() { return Files.FILETYPE.PORTALS.getBoolean("Enabled"); @@ -19,8 +21,8 @@ public class AddonPortals implements Addon { @Override public void load() { - this.database = new PortalsDatabase(Main.getInstance()); - BetterRTP.getInstance().getCmd().registerCommand(new PortalsCommand(), false); + BetterRTP.getInstance().getCmd().registerCommand(cmd, false); + this.database.load(PortalsDatabase.Columns.values()); } @Override diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/PortalsCommand.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/PortalsCommand.java index 62db3b0..cb59a28 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/PortalsCommand.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/PortalsCommand.java @@ -1,11 +1,19 @@ package me.SuperRonanCraft.BetterRTPAddons.portals; +import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand; +import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandHelpable; +import me.SuperRonanCraft.BetterRTPAddons.portals.cmds.*; import org.bukkit.command.CommandSender; import java.util.List; -public class PortalsCommand implements RTPCommand { +public class PortalsCommand implements RTPCommand, RTPCommandHelpable { + AddonPortals pl; + + PortalsCommand(AddonPortals pl) { + this.pl = pl; + } public String getName() { return "portals"; @@ -13,7 +21,13 @@ public class PortalsCommand implements RTPCommand { @Override public void execute(CommandSender sendi, String label, String[] args) { - System.out.println("Portals command!"); + for (subCmd subCmd : subCmd.values()) { + if (args[1].equalsIgnoreCase(subCmd.name())) { + subCmd.cmd.execute(sendi, label, args); + return; + } + } + sendi.sendMessage("Invalid command!"); } @Override @@ -23,6 +37,23 @@ public class PortalsCommand implements RTPCommand { @Override public boolean permission(CommandSender sendi) { - return true; + return BetterRTP.getInstance().getPerms().checkPerm("betterrtp.addon.portals", sendi); + } + + @Override + public String getHelp() { + return pl.msgs.getHelp(); + } + + private enum subCmd { + LOC1(new PortalsCommand_Loc1()), + LOC2(new PortalsCommand_Loc2()), + CREATE(new PortalsCommand_Create()); + + PortalsCommands cmd; + + subCmd(PortalsCommands cmd) { + this.cmd = cmd; + } } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/PortalsDatabase.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/PortalsDatabase.java index faa4525..026a28e 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/PortalsDatabase.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/PortalsDatabase.java @@ -1,33 +1,51 @@ package me.SuperRonanCraft.BetterRTPAddons.portals; -import me.SuperRonanCraft.BetterRTPAddons.LocSerialization; import me.SuperRonanCraft.BetterRTPAddons.Main; import me.SuperRonanCraft.BetterRTPAddons.PlayerInfo; import me.SuperRonanCraft.BetterRTPAddons.database.Database; -import me.SuperRonanCraft.BetterRTPAddons.database.Errors; -import org.bukkit.Location; -import org.bukkit.entity.Player; +import me.SuperRonanCraft.BetterRTPAddons.database.DatabaseColumn; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; import java.util.ArrayList; import java.util.List; -import java.util.UUID; -import java.util.logging.Level; public class PortalsDatabase extends Database { + enum Columns implements DatabaseColumn { + ID("portal", "integer"), + LOCATION_1("location_1", "longtext"), + LOCATION_2("location_2", "longtext"), + TITLE("title", "varchar(255)"); + + private final String name; + private final String type; + + Columns(String name, String type) { + this.name = name; + this.type = type; + } + + @Override + public String getName() { + return name; + } + + @Override + public String getType() { + return type; + } + } + List playerInfos = new ArrayList<>(); - public PortalsDatabase(Main instance){ - super(instance, "addon_flashback"); + public PortalsDatabase(){ + super(Main.getInstance(), "addon_portals"); } private final String createTable = "CREATE TABLE IF NOT EXISTS " + table + " (" + - "`" + COLUMNS.UUID.name + "` " + COLUMNS.UUID.type + " PRIMARY KEY NOT NULL," + - "`" + COLUMNS.NAME.name + "` " + COLUMNS.NAME.type + + "`" + Columns.ID.name + "` " + Columns.ID.type + " PRIMARY KEY AUTOINCREMENT," + + "`" + Columns.LOCATION_1.name + "` " + Columns.LOCATION_2.type + "," + + "`" + Columns.LOCATION_2.name + "` " + Columns.LOCATION_2.type + "," + + "`" + Columns.TITLE.name + "` " + Columns.TITLE.type + ");"; @@ -37,23 +55,23 @@ public class PortalsDatabase extends Database { } @Override - public void load() { + public void load(DatabaseColumn[] columns) { playerInfos.clear(); - super.load(); + super.load(columns); } - public PlayerInfo getPlayer(Player p) { + /*public PlayerInfo getPlayer(Player p) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = getSQLConnection(); - ps = conn.prepareStatement("SELECT * FROM " + table + " WHERE " + COLUMNS.UUID.name + " = ?"); + ps = conn.prepareStatement("SELECT * FROM " + table + " WHERE " + Columns.UUID.name + " = ?"); UUID id = p.getUniqueId(); ps.setString(1, id != null ? id.toString() : console_id); rs = ps.executeQuery(); if (rs.next()) { - Location loc = LocSerialization.getLocationFromString(rs.getString(COLUMNS.LOCATION_OLD.name)); + Location loc = LocSerialization.getLocationFromString(rs.getString(Columns.LOCATION_OLD.name)); return new PlayerInfo(p, loc); } } catch (SQLException ex) { @@ -70,8 +88,8 @@ public class PortalsDatabase extends Database { boolean success = true; try { conn = getSQLConnection(); - ps = conn.prepareStatement("INSERT INTO " + table + "(" + COLUMNS.UUID.name + ", " + COLUMNS.LOCATION_OLD.name + ") VALUES (?, ?) " - + "ON CONFLICT(" + COLUMNS.UUID.name + ") DO UPDATE SET " + COLUMNS.LOCATION_OLD.name + " = + ?"); + ps = conn.prepareStatement("INSERT INTO " + table + "(" + Columns.UUID.name + ", " + Columns.LOCATION_OLD.name + ") VALUES (?, ?) " + + "ON CONFLICT(" + Columns.UUID.name + ") DO UPDATE SET " + Columns.LOCATION_OLD.name + " = + ?"); UUID id = p.getUniqueId(); ps.setString(1, id != null ? id.toString() : console_id); String serialLocation = LocSerialization.getStringFromLocation(oldLocation); @@ -85,5 +103,5 @@ public class PortalsDatabase extends Database { close(ps, null, conn); } return success; - } + }*/ } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/PortalsMessages.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/PortalsMessages.java index dcd24ab..0b25a9b 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/PortalsMessages.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/PortalsMessages.java @@ -5,13 +5,17 @@ import me.SuperRonanCraft.BetterRTPAddons.Files; import org.bukkit.command.CommandSender; public class PortalsMessages implements AddonsMessages { - private static String preM = "Messages"; + private static final String preM = "Messages."; private Files.FILETYPE getLang() { - return Files.FILETYPE.FLASHBACK; + return Files.FILETYPE.PORTALS; } public void getWarning(CommandSender sendi) { sms(sendi, getLang().getString(preM + "Warning")); } + + public String getHelp() { + return getLang().getString(preM + "Help"); + } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommand_Create.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommand_Create.java new file mode 100644 index 0000000..1e5172e --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommand_Create.java @@ -0,0 +1,11 @@ +package me.SuperRonanCraft.BetterRTPAddons.portals.cmds; + +import org.bukkit.command.CommandSender; + +public class PortalsCommand_Create implements PortalsCommands { + + @Override + public void execute(CommandSender sendi, String label, String[] args) { + sendi.sendMessage("Portals Create command!"); + } +} diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommand_Loc1.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommand_Loc1.java new file mode 100644 index 0000000..7be61fe --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommand_Loc1.java @@ -0,0 +1,11 @@ +package me.SuperRonanCraft.BetterRTPAddons.portals.cmds; + +import org.bukkit.command.CommandSender; + +public class PortalsCommand_Loc1 implements PortalsCommands { + + @Override + public void execute(CommandSender sendi, String label, String[] args) { + sendi.sendMessage("Portals Loc1 command!"); + } +} diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommand_Loc2.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommand_Loc2.java new file mode 100644 index 0000000..5781489 --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommand_Loc2.java @@ -0,0 +1,11 @@ +package me.SuperRonanCraft.BetterRTPAddons.portals.cmds; + +import org.bukkit.command.CommandSender; + +public class PortalsCommand_Loc2 implements PortalsCommands { + + @Override + public void execute(CommandSender sendi, String label, String[] args) { + sendi.sendMessage("Portals Loc2 command!"); + } +} diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommands.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommands.java new file mode 100644 index 0000000..1a5fc7c --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/portals/cmds/PortalsCommands.java @@ -0,0 +1,9 @@ +package me.SuperRonanCraft.BetterRTPAddons.portals.cmds; + +import org.bukkit.command.CommandSender; + +public interface PortalsCommands { + + public void execute(CommandSender sendi, String label, String[] args); + +} diff --git a/BetterRTPAddons/src/main/resources/logger.yml b/BetterRTPAddons/src/main/resources/logger.yml new file mode 100644 index 0000000..7f224a4 --- /dev/null +++ b/BetterRTPAddons/src/main/resources/logger.yml @@ -0,0 +1,2 @@ +Enabled: true +Debug: true \ No newline at end of file diff --git a/BetterRTPAddons/src/main/resources/plugin.yml b/BetterRTPAddons/src/main/resources/plugin.yml index 1656b12..f5bb48d 100644 --- a/BetterRTPAddons/src/main/resources/plugin.yml +++ b/BetterRTPAddons/src/main/resources/plugin.yml @@ -4,3 +4,7 @@ api-version: '1.13' name: BetterRTPAddons depend: [BetterRTP] +permissions: + betterrtp.addon.portals: + description: Ability to use the portals addon commands + diff --git a/BetterRTPAddons/src/main/resources/portals.yml b/BetterRTPAddons/src/main/resources/portals.yml index 4255c84..bec580b 100644 --- a/BetterRTPAddons/src/main/resources/portals.yml +++ b/BetterRTPAddons/src/main/resources/portals.yml @@ -1 +1,4 @@ Enabled: false + +Messages: + Help: ' &7- &e/%command% portals &7- Setup an rtp portal' diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java index 5e5c5d8..e9dc49a 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java @@ -24,7 +24,7 @@ public class Commands { public HashMap rtping = new HashMap<>(); public RTPCooldown cooldowns = new RTPCooldown(); private int delayTimer; - List commands = new ArrayList<>(); + public List commands = new ArrayList<>(); public Commands(BetterRTP pl) { this.pl = pl; diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdHelp.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdHelp.java index 73bf7e9..82fb54a 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdHelp.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdHelp.java @@ -21,13 +21,12 @@ public class CmdHelp implements RTPCommand, RTPCommandHelpable { List list = new ArrayList<>(); list.add(txt.getHelpPrefix()); list.add(txt.getHelpMain()); - for (RTPCommandType cmd : RTPCommandType.values()) - if (!cmd.isDebugOnly() || BetterRTP.getInstance().getSettings().debug) - if (cmd.getCmd().permission(sendi)) - if (cmd.getCmd() instanceof RTPCommandHelpable) { - String help = ((RTPCommandHelpable) cmd.getCmd()).getHelp(); - list.add(help); - } + for (RTPCommand cmd : BetterRTP.getInstance().getCmd().commands) + if (cmd.permission(sendi)) + if (cmd instanceof RTPCommandHelpable) { + String help = ((RTPCommandHelpable) cmd).getHelp(); + list.add(help); + } for (int i = 0; i < list.size(); i++) list.set(i, list.get(i).replace("%command%", label)); BetterRTP.getInstance().getText().sms(sendi, list); diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/Permissions.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/Permissions.java index a387f9d..4f5e146 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/Permissions.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/Permissions.java @@ -16,86 +16,86 @@ public class Permissions { private final String pre = "betterrtp."; public boolean getUse(CommandSender sendi) { - return perm(pre + "use", sendi); + return checkPerm(pre + "use", sendi); } public boolean getBypassEconomy(CommandSender sendi) { - return perm(pre + "bypass.economy", sendi); + return checkPerm(pre + "bypass.economy", sendi); } public boolean getBypassHunger(CommandSender sendi) { - return perm(pre + "bypass.hunger", sendi); + return checkPerm(pre + "bypass.hunger", sendi); } public boolean getBypassCooldown(CommandSender sendi) { - return perm(pre + "bypass.cooldown", sendi); + return checkPerm(pre + "bypass.cooldown", sendi); } public boolean getBypassDelay(CommandSender sendi) { - return perm(pre + "bypass.delay", sendi); + return checkPerm(pre + "bypass.delay", sendi); } public boolean getReload(CommandSender sendi) { - return perm(pre + "reload", sendi); + return checkPerm(pre + "reload", sendi); } public boolean getSettings(CommandSender sendi) { - return perm(pre + "settings", sendi); + return checkPerm(pre + "settings", sendi); } public boolean getInfo(CommandSender sendi) { - return perm(pre + "info", sendi); + return checkPerm(pre + "info", sendi); } public boolean getUpdate(CommandSender sendi) { - return perm(pre + "updater", sendi); + return checkPerm(pre + "updater", sendi); } public boolean getRtpOther(CommandSender sendi) { - return perm(pre + "player", sendi); + return checkPerm(pre + "player", sendi); } public boolean getBiome(CommandSender sendi) { - return perm(pre + "biome", sendi); + return checkPerm(pre + "biome", sendi); } public boolean getWorld(CommandSender sendi) { - return perm(pre + "world", sendi); + return checkPerm(pre + "world", sendi); } public boolean getSignCreate(CommandSender sendi) { - return perm(pre + "sign", sendi); + return checkPerm(pre + "sign", sendi); } public boolean getTest(CommandSender sendi) { - return perm(pre + "test", sendi); + return checkPerm(pre + "test", sendi); } public boolean getVersion(CommandSender sendi) { - return perm(pre + "version", sendi); + return checkPerm(pre + "version", sendi); } public boolean getAWorld(CommandSender sendi, String world) { - if (perm(pre + "world.*", sendi)) + if (checkPerm(pre + "world.*", sendi)) return true; else if (world == null) { for (World w : Bukkit.getWorlds()) - if (perm(pre + "world." + w.getName(), sendi)) + if (checkPerm(pre + "world." + w.getName(), sendi)) return true; } else - return perm(pre + "world." + world, sendi); + return checkPerm(pre + "world." + world, sendi); return false; } public boolean getEdit(CommandSender sendi) { - return perm(pre + "edit", sendi); + return checkPerm(pre + "edit", sendi); } public boolean getPermissionGroup(CommandSender sendi, String group) { - return perm(pre + "group." + group, sendi); + return checkPerm(pre + "group." + group, sendi); } - private boolean perm(String str, CommandSender sendi) { + public boolean checkPerm(String str, CommandSender sendi) { return depPerms.hasPerm(str, sendi); } }