mirror of
https://github.com/RonanPlugins/BetterRTP.git
synced 2025-08-17 17:15:47 +00:00
addons can now register commands + new portals addon
This commit is contained in:
parent
be3c7cadb8
commit
67cca730c4
@ -6,15 +6,20 @@ import org.bukkit.event.Listener;
|
||||
|
||||
public interface Addon extends Listener {
|
||||
|
||||
//Addon will check if it can be enabled
|
||||
boolean isEnabled();
|
||||
|
||||
//Load the addon if enabled
|
||||
void load();
|
||||
|
||||
//Unload the addon if enabled
|
||||
void unload();
|
||||
|
||||
default void register() {
|
||||
Bukkit.getPluginManager().registerEvents(this, Main.getInstance());
|
||||
}
|
||||
|
||||
default void disable() {
|
||||
default void unregister() {
|
||||
HandlerList.unregisterAll(this);
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,10 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTPAddons.flashBack.AddonFlashback;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.flashback.AddonFlashback;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.interfaces.AddonInterface;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.portals.AddonPortals;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
|
||||
@ -21,12 +22,14 @@ public class AddonsHandler {
|
||||
addon.load();
|
||||
addons.add(addon);
|
||||
} else {
|
||||
Main.getInstance().getLogger().log(Level.INFO, "Addon was not loaded " + addon.name());
|
||||
Main.getInstance().getLogger().log(Level.INFO, "Addon " + addon.name() + " was NOT enabled.");
|
||||
}
|
||||
}
|
||||
|
||||
enum Addons {
|
||||
FLASH_BACK(new AddonFlashback());
|
||||
FLASH_BACK(new AddonFlashback()),
|
||||
PORTALS(new AddonPortals()),
|
||||
INTERFACES(new AddonInterface());
|
||||
|
||||
Addon addon;
|
||||
|
||||
@ -39,13 +42,13 @@ public class AddonsHandler {
|
||||
}
|
||||
|
||||
void load() {
|
||||
Main.getInstance().getLogger().log(Level.INFO, "Addon loaded " + this.name());
|
||||
addon.register();
|
||||
addon.load();
|
||||
Main.getInstance().getLogger().log(Level.INFO, "Addon " + this.name() + " has been enabled!");
|
||||
}
|
||||
|
||||
void disable() {
|
||||
addon.disable();
|
||||
addon.unregister();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,7 @@ public class Files {
|
||||
}
|
||||
|
||||
public enum FILETYPE {
|
||||
CONFIG("config"), EFFECTS("flashback");
|
||||
CONFIG("config"), FLASHBACK("flashback"), PORTALS("portals"), INTERFACE("interface");
|
||||
|
||||
private final String fileName;
|
||||
private final YamlConfiguration config = new YamlConfiguration();
|
||||
|
@ -0,0 +1,55 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
|
||||
public class LocSerialization {
|
||||
|
||||
public static String getStringFromLocation(Location loc) {
|
||||
if (loc == null) {
|
||||
return "";
|
||||
}
|
||||
return loc.getWorld().getName() + ":" + loc.getX() + ":" + loc.getY() + ":" + loc.getZ() + ":" + loc.getYaw() + ":" + loc.getPitch() ;
|
||||
}
|
||||
|
||||
public static Location getLocationFromString(String s) {
|
||||
if (s == null || s.trim() == "") {
|
||||
return null;
|
||||
}
|
||||
final String[] parts = s.split(":");
|
||||
if (parts.length == 6) {
|
||||
World w = Bukkit.getServer().getWorld(parts[0]);
|
||||
double x = Double.parseDouble(parts[1]);
|
||||
double y = Double.parseDouble(parts[2]);
|
||||
double z = Double.parseDouble(parts[3]);
|
||||
float yaw = Float.parseFloat(parts[4]);
|
||||
float pitch = Float.parseFloat(parts[5]);
|
||||
return new Location(w, x, y, z, yaw, pitch);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String getLiteStringFromLocation(Location loc) {
|
||||
if (loc == null) {
|
||||
return "";
|
||||
}
|
||||
return loc.getWorld().getName() + ":" + loc.getBlockX() + ":" + loc.getBlockY() + ":" + loc.getBlockZ() ;
|
||||
}
|
||||
|
||||
public static Location getLiteLocationFromString(String s) {
|
||||
if (s == null || s.trim() == "") {
|
||||
return null;
|
||||
}
|
||||
final String[] parts = s.split(":");
|
||||
if (parts.length == 4) {
|
||||
World w = Bukkit.getServer().getWorld(parts[0]);
|
||||
double x = Double.parseDouble(parts[1]);
|
||||
double y = Double.parseDouble(parts[2]);
|
||||
double z = Double.parseDouble(parts[3]);
|
||||
return new Location(w, x, y, z);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -11,6 +11,7 @@ public class Main extends JavaPlugin {
|
||||
@Override
|
||||
public void onEnable() {
|
||||
instance = this;
|
||||
new ReloadListener(this);
|
||||
load();
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,23 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PlayerInfo {
|
||||
|
||||
private final Player player;
|
||||
private final Location location;
|
||||
|
||||
public PlayerInfo(Player player, Location location) {
|
||||
this.player = player;
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public Location getLocation() {
|
||||
return location;
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandType;
|
||||
import me.SuperRonanCraft.BetterRTP.player.commands.types.CmdReload;
|
||||
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_CommandEvent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
public class ReloadListener implements Listener {
|
||||
|
||||
ReloadListener(Main pl) {
|
||||
Bukkit.getPluginManager().registerEvents(this, pl);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
void reload(RTP_CommandEvent e) {
|
||||
if (e.getCmd() instanceof CmdReload)
|
||||
Main.getInstance().load();
|
||||
}
|
||||
}
|
@ -0,0 +1,112 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.database;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Main;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.sql.*;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public abstract class Database {
|
||||
|
||||
public String console_id = "CONSOLE";
|
||||
public Connection connection;
|
||||
public Main plugin;
|
||||
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;
|
||||
this.db_name = db_name;
|
||||
}
|
||||
|
||||
protected Connection getSQLConnection() {
|
||||
File dataFolder = new File(plugin.getDataFolder().getPath() + File.separator + "data", db_name + ".db");
|
||||
if (!dataFolder.exists()){
|
||||
try {
|
||||
dataFolder.getParentFile().mkdirs();
|
||||
dataFolder.createNewFile();
|
||||
} catch (IOException e) {
|
||||
plugin.getLogger().log(Level.SEVERE, "File write error: " + db_name + ".db");
|
||||
}
|
||||
}
|
||||
try {
|
||||
if(connection!=null&&!connection.isClosed()){
|
||||
return connection;
|
||||
}
|
||||
Class.forName("org.sqlite.JDBC");
|
||||
connection = DriverManager.getConnection("jdbc:sqlite:" + dataFolder);
|
||||
return connection;
|
||||
} catch (SQLException ex) {
|
||||
plugin.getLogger().log(Level.SEVERE, "SQLite exception on initialize", ex);
|
||||
} catch (ClassNotFoundException ex) {
|
||||
plugin.getLogger().log(Level.SEVERE, "You need the SQLite JBDC library. Google it. Put it in /lib folder.");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
//Get the layout of the database table
|
||||
public abstract String getTableFormat();
|
||||
|
||||
public void load() {
|
||||
connection = getSQLConnection();
|
||||
try {
|
||||
Statement s = connection.createStatement();
|
||||
s.executeUpdate(getTableFormat());
|
||||
for (COLUMNS c : COLUMNS.values()) { //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));
|
||||
} catch (SQLException e) {
|
||||
//e.printStackTrace();
|
||||
}
|
||||
}
|
||||
s.close();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
initialize();
|
||||
}
|
||||
|
||||
private void initialize() {
|
||||
Connection conn = null;
|
||||
PreparedStatement ps = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
conn = getSQLConnection();
|
||||
ps = conn.prepareStatement("SELECT * FROM " + table + " WHERE " + COLUMNS.UUID.name + " = ?");
|
||||
|
||||
rs = ps.executeQuery();
|
||||
} catch (SQLException ex) {
|
||||
plugin.getLogger().log(Level.SEVERE, "Unable to retreive connection", ex);
|
||||
} finally {
|
||||
close(ps, rs, conn);
|
||||
}
|
||||
}
|
||||
|
||||
//Processing
|
||||
protected void close(PreparedStatement ps, ResultSet rs, java.sql.Connection conn) {
|
||||
try {
|
||||
if (ps != null) ps.close();
|
||||
if (conn != null) conn.close();
|
||||
if (rs != null) rs.close();
|
||||
} catch (SQLException ex) {
|
||||
Error.close(plugin, ex);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.database;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Main;
|
||||
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class Error {
|
||||
|
||||
public static void execute(Main plugin, Exception ex){
|
||||
plugin.getLogger().log(Level.SEVERE, "Couldn't execute MySQL statement: ", ex);
|
||||
}
|
||||
|
||||
public static void close(Main plugin, Exception ex){
|
||||
plugin.getLogger().log(Level.SEVERE, "Failed to close MySQL connection: ", ex);
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.database;
|
||||
|
||||
public class Errors {
|
||||
public static String sqlConnectionExecute(){
|
||||
return "Couldn't execute MySQL statement: ";
|
||||
}
|
||||
public static String sqlConnectionClose(){
|
||||
return "Failed to close MySQL connection: ";
|
||||
}
|
||||
public static String noSQLConnection(){
|
||||
return "Unable to retreive MYSQL connection: ";
|
||||
}
|
||||
public static String noTableFound(){
|
||||
return "Database Error: No Table Found";
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.flashBack;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEvent;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Addon;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Files;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
public class AddonFlashback implements Addon {
|
||||
|
||||
private Long time;
|
||||
public MessagesFlashback msgs = new MessagesFlashback();
|
||||
|
||||
public boolean isEnabled() {
|
||||
return Files.FILETYPE.EFFECTS.getBoolean("Enabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
Files.FILETYPE file = Files.FILETYPE.EFFECTS;
|
||||
this.time = file.getConfig().getLong("Time");
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
void onTeleport(RTP_TeleportPostEvent e) {
|
||||
System.out.println("Player " + e.getPlayer().getName() + " was rtp'd!");
|
||||
new PlayerFlashback(this, e.getPlayer(), e.getOldLocation(), 20L * time);
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.flashBack;
|
||||
|
||||
import io.papermc.lib.PaperLib;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Main;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PlayerFlashback {
|
||||
Player p;
|
||||
Location oldLoc;
|
||||
AddonFlashback plugin;
|
||||
|
||||
public PlayerFlashback(AddonFlashback plugin, Player p, Location oldLoc, Long delayInTicks) {
|
||||
this.plugin = plugin;
|
||||
this.p = p;
|
||||
this.oldLoc = oldLoc;
|
||||
Bukkit.getScheduler().runTaskLater(Main.getInstance(), getTimedFlash(), delayInTicks);
|
||||
}
|
||||
|
||||
private Runnable getTimedFlash() {
|
||||
return () -> {
|
||||
plugin.msgs.getWarning(p);
|
||||
PaperLib.teleportAsync(p, oldLoc);
|
||||
};
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.flashback;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEvent;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Addon;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Files;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Main;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
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 {
|
||||
|
||||
private Long time;
|
||||
public FlashbackMessages msgs = new FlashbackMessages();
|
||||
public FlashbackDatabase database;
|
||||
List<FlashbackPlayer> players = new ArrayList<>();
|
||||
|
||||
public boolean isEnabled() {
|
||||
return Files.FILETYPE.FLASHBACK.getBoolean("Enabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
Files.FILETYPE file = Files.FILETYPE.FLASHBACK;
|
||||
this.time = file.getConfig().getLong("Time");
|
||||
this.database = new FlashbackDatabase(Main.getInstance());
|
||||
this.database.load();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
for (FlashbackPlayer fbp : players)
|
||||
fbp.cancel();
|
||||
players.clear();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
void onTeleport(RTP_TeleportPostEvent e) {
|
||||
System.out.println("Player " + e.getPlayer().getName() + " was rtp'd!");
|
||||
players.add(new FlashbackPlayer(this, e.getPlayer(), e.getOldLocation(), time));
|
||||
}
|
||||
}
|
@ -0,0 +1,89 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.flashback;
|
||||
|
||||
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 java.sql.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class FlashbackDatabase extends Database {
|
||||
|
||||
List<PlayerInfo> playerInfos = new ArrayList<>();
|
||||
|
||||
public FlashbackDatabase(Main instance){
|
||||
super(instance, "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" +
|
||||
");";
|
||||
|
||||
|
||||
@Override
|
||||
public String getTableFormat() {
|
||||
return createTable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
playerInfos.clear();
|
||||
super.load();
|
||||
}
|
||||
|
||||
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 + " = ?");
|
||||
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));
|
||||
return new PlayerInfo(p, loc);
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
plugin.getLogger().log(Level.SEVERE, Errors.sqlConnectionExecute(), ex);
|
||||
} finally {
|
||||
close(ps, rs, conn);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean setPlayer(Player p, Location oldLocation, Long timeGoal) {
|
||||
Connection conn = null;
|
||||
PreparedStatement ps = null;
|
||||
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 + " = + ?");
|
||||
UUID id = p.getUniqueId();
|
||||
ps.setString(1, id != null ? id.toString() : console_id);
|
||||
String serialLocation = LocSerialization.getStringFromLocation(oldLocation);
|
||||
ps.setString(2, serialLocation);
|
||||
ps.setString(3, serialLocation);
|
||||
ps.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
plugin.getLogger().log(Level.SEVERE, Errors.sqlConnectionExecute(), ex);
|
||||
success = false;
|
||||
} finally {
|
||||
close(ps, null, conn);
|
||||
}
|
||||
return success;
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.flashback;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTPAddons.AddonsMessages;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Files;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
public class FlashbackMessages implements AddonsMessages {
|
||||
private static String preM = "Messages";
|
||||
|
||||
private Files.FILETYPE getLang() {
|
||||
return Files.FILETYPE.FLASHBACK;
|
||||
}
|
||||
|
||||
public void getWarning(CommandSender sendi) {
|
||||
sms(sendi, getLang().getString(preM + "Warning"));
|
||||
}
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.flashback;
|
||||
|
||||
import io.papermc.lib.PaperLib;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Main;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
public class FlashbackPlayer {
|
||||
Player p;
|
||||
Location oldLoc;
|
||||
AddonFlashback plugin;
|
||||
BukkitTask task;
|
||||
|
||||
public FlashbackPlayer(AddonFlashback plugin, Player p, Location oldLoc, Long seconds) {
|
||||
this.plugin = plugin;
|
||||
this.p = p;
|
||||
this.oldLoc = oldLoc;
|
||||
this.task = Bukkit.getScheduler().runTaskLater(Main.getInstance(), getTimedFlash(seconds), 20L * seconds);
|
||||
}
|
||||
|
||||
private Runnable getTimedFlash(Long seconds) {
|
||||
plugin.database.setPlayer(p, oldLoc, System.currentTimeMillis() + (seconds * 1000));
|
||||
return () -> {
|
||||
plugin.msgs.getWarning(p);
|
||||
PaperLib.teleportAsync(p, oldLoc);
|
||||
completed();
|
||||
};
|
||||
}
|
||||
|
||||
public void cancel() {
|
||||
task.cancel();
|
||||
}
|
||||
|
||||
private void completed() {
|
||||
plugin.players.remove(this);
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.interfaces;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Addon;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Files;
|
||||
|
||||
public class AddonInterface implements Addon {
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return Files.FILETYPE.INTERFACE.getBoolean("Enabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.portals;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTP.BetterRTP;
|
||||
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEvent;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Addon;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Files;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Main;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
//With a gui, a player
|
||||
public class AddonPortals implements Addon {
|
||||
|
||||
public PortalsMessages msgs = new PortalsMessages();
|
||||
private PortalsDatabase database;
|
||||
|
||||
public boolean isEnabled() {
|
||||
return Files.FILETYPE.PORTALS.getBoolean("Enabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
this.database = new PortalsDatabase(Main.getInstance());
|
||||
BetterRTP.getInstance().getCmd().registerCommand(new PortalsCommand(), false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.portals;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PortalsCommand implements RTPCommand {
|
||||
|
||||
public String getName() {
|
||||
return "portals";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sendi, String label, String[] args) {
|
||||
System.out.println("Portals command!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> tabComplete(CommandSender sendi, String[] args) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean permission(CommandSender sendi) {
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,89 @@
|
||||
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 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 {
|
||||
|
||||
List<PlayerInfo> playerInfos = new ArrayList<>();
|
||||
|
||||
public PortalsDatabase(Main instance){
|
||||
super(instance, "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 +
|
||||
");";
|
||||
|
||||
|
||||
@Override
|
||||
public String getTableFormat() {
|
||||
return createTable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
playerInfos.clear();
|
||||
super.load();
|
||||
}
|
||||
|
||||
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 + " = ?");
|
||||
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));
|
||||
return new PlayerInfo(p, loc);
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
plugin.getLogger().log(Level.SEVERE, Errors.sqlConnectionExecute(), ex);
|
||||
} finally {
|
||||
close(ps, rs, conn);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean setPlayer(Player p, Location oldLocation) {
|
||||
Connection conn = null;
|
||||
PreparedStatement ps = null;
|
||||
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 + " = + ?");
|
||||
UUID id = p.getUniqueId();
|
||||
ps.setString(1, id != null ? id.toString() : console_id);
|
||||
String serialLocation = LocSerialization.getStringFromLocation(oldLocation);
|
||||
ps.setString(2, serialLocation);
|
||||
ps.setString(3, serialLocation);
|
||||
ps.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
plugin.getLogger().log(Level.SEVERE, Errors.sqlConnectionExecute(), ex);
|
||||
success = false;
|
||||
} finally {
|
||||
close(ps, null, conn);
|
||||
}
|
||||
return success;
|
||||
}
|
||||
}
|
@ -1,14 +1,14 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.flashBack;
|
||||
package me.SuperRonanCraft.BetterRTPAddons.portals;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTPAddons.AddonsMessages;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Files;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
public class MessagesFlashback implements AddonsMessages {
|
||||
public class PortalsMessages implements AddonsMessages {
|
||||
private static String preM = "Messages";
|
||||
|
||||
private Files.FILETYPE getLang() {
|
||||
return Files.FILETYPE.EFFECTS;
|
||||
return Files.FILETYPE.FLASHBACK;
|
||||
}
|
||||
|
||||
public void getWarning(CommandSender sendi) {
|
0
BetterRTPAddons/src/main/resources/config.yml
Normal file
0
BetterRTPAddons/src/main/resources/config.yml
Normal file
1
BetterRTPAddons/src/main/resources/interface.yml
Normal file
1
BetterRTPAddons/src/main/resources/interface.yml
Normal file
@ -0,0 +1 @@
|
||||
Enabled: false
|
1
BetterRTPAddons/src/main/resources/portals.yml
Normal file
1
BetterRTPAddons/src/main/resources/portals.yml
Normal file
@ -0,0 +1 @@
|
||||
Enabled: false
|
@ -24,6 +24,7 @@ public class Commands {
|
||||
public HashMap<UUID, Boolean> rtping = new HashMap<>();
|
||||
public RTPCooldown cooldowns = new RTPCooldown();
|
||||
private int delayTimer;
|
||||
List<RTPCommand> commands = new ArrayList<>();
|
||||
|
||||
public Commands(BetterRTP pl) {
|
||||
this.pl = pl;
|
||||
@ -34,22 +35,28 @@ public class Commands {
|
||||
delayTimer = config.getInt("Settings.Delay.Time");
|
||||
cooldowns.load();
|
||||
rtping.clear();
|
||||
commands.clear();
|
||||
for (RTPCommandType cmd : RTPCommandType.values())
|
||||
registerCommand(cmd.getCmd(), false);
|
||||
}
|
||||
|
||||
public void registerCommand(RTPCommand cmd, boolean forced) {
|
||||
if (!cmd.isDebugOnly() || pl.getSettings().debug || forced) //If debug only, can it be enabled?
|
||||
commands.add(cmd);
|
||||
}
|
||||
|
||||
public void commandExecuted(CommandSender sendi, String label, String[] args) {
|
||||
if (pl.getPerms().getUse(sendi)) {
|
||||
if (args != null && args.length > 0) {
|
||||
for (RTPCommandType cmd : RTPCommandType.values()) {
|
||||
if (cmd.name().equalsIgnoreCase(args[0])) {
|
||||
if (!cmd.isDebugOnly() || pl.getSettings().debug) { //Debug only?
|
||||
if (cmd.getCmd().permission(sendi)) {
|
||||
cmd.getCmd().execute(sendi, label, args);
|
||||
//Command Event
|
||||
Bukkit.getServer().getPluginManager().callEvent(new RTP_CommandEvent(sendi, cmd));
|
||||
} else
|
||||
noPerm(sendi);
|
||||
return;
|
||||
}
|
||||
for (RTPCommand cmd : commands) {
|
||||
if (cmd.getName().equalsIgnoreCase(args[0])) {
|
||||
if (cmd.permission(sendi)) {
|
||||
//Command Event
|
||||
Bukkit.getServer().getPluginManager().callEvent(new RTP_CommandEvent(sendi, cmd));
|
||||
cmd.execute(sendi, label, args);
|
||||
} else
|
||||
noPerm(sendi);
|
||||
return;
|
||||
}
|
||||
}
|
||||
invalid(sendi, label);
|
||||
@ -66,21 +73,19 @@ public class Commands {
|
||||
public List<String> onTabComplete(CommandSender sendi, String[] args) {
|
||||
List<String> list = new ArrayList<>();
|
||||
if (args.length == 1) {
|
||||
for (RTPCommandType cmd : RTPCommandType.values()) {
|
||||
if (cmd.name().toLowerCase().startsWith(args[0].toLowerCase()))
|
||||
if (!cmd.isDebugOnly() || pl.getSettings().debug) //Debug only?
|
||||
if (cmd.getCmd().permission(sendi))
|
||||
list.add(cmd.name().toLowerCase());
|
||||
for (RTPCommand cmd : commands) {
|
||||
if (cmd.getName().toLowerCase().startsWith(args[0].toLowerCase()))
|
||||
if (cmd.permission(sendi))
|
||||
list.add(cmd.getName().toLowerCase());
|
||||
}
|
||||
} else if (args.length > 1) {
|
||||
for (RTPCommandType cmd : RTPCommandType.values()) {
|
||||
if (cmd.name().equalsIgnoreCase(args[0]))
|
||||
if (!cmd.isDebugOnly() || pl.getSettings().debug) //Debug only?
|
||||
if (cmd.getCmd().permission(sendi)) {
|
||||
List<String> _cmdlist = cmd.getCmd().tabComplete(sendi, args);
|
||||
if (_cmdlist != null)
|
||||
list.addAll(_cmdlist);
|
||||
}
|
||||
for (RTPCommand cmd : commands) {
|
||||
if (cmd.getName().equalsIgnoreCase(args[0]))
|
||||
if (cmd.permission(sendi)) {
|
||||
List<String> _cmdlist = cmd.tabComplete(sendi, args);
|
||||
if (_cmdlist != null)
|
||||
list.addAll(_cmdlist);
|
||||
}
|
||||
}
|
||||
}
|
||||
return list;
|
||||
|
@ -11,4 +11,10 @@ public interface RTPCommand {
|
||||
List<String> tabComplete(CommandSender sendi, String[] args);
|
||||
|
||||
boolean permission(CommandSender sendi);
|
||||
|
||||
String getName();
|
||||
|
||||
default boolean isDebugOnly() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,10 @@ import java.util.List;
|
||||
|
||||
public class CmdBiome implements RTPCommand, RTPCommandHelpable {
|
||||
|
||||
public String getName() {
|
||||
return "biome";
|
||||
}
|
||||
|
||||
//rtp biome <biome1, biome2...>
|
||||
public void execute(CommandSender sendi, String label, String[] args) {
|
||||
if (args.length >= 2)
|
||||
|
@ -15,6 +15,10 @@ import java.util.*;
|
||||
|
||||
public class CmdEdit implements RTPCommand, RTPCommandHelpable { //Edit a worlds properties
|
||||
|
||||
public String getName() {
|
||||
return "edit";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sendi, String label, String[] args) {
|
||||
if (args.length >= 4) {
|
||||
|
@ -12,6 +12,10 @@ import java.util.List;
|
||||
|
||||
public class CmdHelp implements RTPCommand, RTPCommandHelpable {
|
||||
|
||||
public String getName() {
|
||||
return "help";
|
||||
}
|
||||
|
||||
public void execute(CommandSender sendi, String label, String[] args) {
|
||||
Messages txt = BetterRTP.getInstance().getText();
|
||||
List<String> list = new ArrayList<>();
|
||||
|
@ -18,6 +18,10 @@ import java.util.List;
|
||||
|
||||
public class CmdInfo implements RTPCommand, RTPCommandHelpable {
|
||||
|
||||
public String getName() {
|
||||
return "info";
|
||||
}
|
||||
|
||||
public void execute(CommandSender sendi, String label, String[] args) {
|
||||
if (args.length > 1) {
|
||||
if (args[1].equalsIgnoreCase(CmdInfoSub.PARTICLES.name()))
|
||||
|
@ -16,6 +16,10 @@ import java.util.List;
|
||||
|
||||
public class CmdPlayer implements RTPCommand, RTPCommandHelpable {
|
||||
|
||||
public String getName() {
|
||||
return "player";
|
||||
}
|
||||
|
||||
//rtp player <world> <biome1> <biome2...>
|
||||
public void execute(CommandSender sendi, String label, String[] args) {
|
||||
if (args.length == 2)
|
||||
|
@ -9,6 +9,10 @@ import java.util.List;
|
||||
|
||||
public class CmdReload implements RTPCommand, RTPCommandHelpable {
|
||||
|
||||
public String getName() {
|
||||
return "reload";
|
||||
}
|
||||
|
||||
public void execute(CommandSender sendi, String label, String[] args) {
|
||||
BetterRTP.getInstance().reload(sendi);
|
||||
}
|
||||
|
@ -11,6 +11,10 @@ import java.util.List;
|
||||
|
||||
public class CmdSettings implements RTPCommand, RTPCommandHelpable {
|
||||
|
||||
public String getName() {
|
||||
return "settings";
|
||||
}
|
||||
|
||||
public void execute(CommandSender sendi, String label, String[] args) {
|
||||
if (sendi instanceof Player)
|
||||
BetterRTP.getInstance().getInvs().getInv(RTP_INV_SETTINGS.MAIN).show((Player) sendi);
|
||||
|
@ -11,6 +11,10 @@ import java.util.List;
|
||||
//Meant to just test particles and effects without actually rtp'ing around the world
|
||||
public class CmdTest implements RTPCommand, RTPCommandHelpable {
|
||||
|
||||
public String getName() {
|
||||
return "test";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sendi, String label, String[] args) {
|
||||
if (sendi instanceof Player) {
|
||||
@ -35,4 +39,8 @@ public class CmdTest implements RTPCommand, RTPCommandHelpable {
|
||||
return BetterRTP.getInstance().getText().getHelpTest();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDebugOnly() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,10 @@ import java.util.List;
|
||||
|
||||
public class CmdVersion implements RTPCommand, RTPCommandHelpable {
|
||||
|
||||
public String getName() {
|
||||
return "version";
|
||||
}
|
||||
|
||||
public void execute(CommandSender sendi, String label, String[] args) {
|
||||
sendi.sendMessage(BetterRTP.getInstance().getText().colorPre("&aVersion #&e" + BetterRTP.getInstance().getDescription().getVersion()));
|
||||
}
|
||||
|
@ -14,6 +14,10 @@ import java.util.List;
|
||||
|
||||
public class CmdWorld implements RTPCommand, RTPCommandHelpable {
|
||||
|
||||
public String getName() {
|
||||
return "world";
|
||||
}
|
||||
|
||||
//rtp world <world> <biome1, biome2...>
|
||||
public void execute(CommandSender sendi, String label, String[] args) {
|
||||
if (args.length >= 2)
|
||||
|
@ -1,5 +1,6 @@
|
||||
package me.SuperRonanCraft.BetterRTP.references.customEvents;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand;
|
||||
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandType;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.event.Event;
|
||||
@ -8,10 +9,10 @@ import org.bukkit.event.HandlerList;
|
||||
public class RTP_CommandEvent extends Event {
|
||||
|
||||
CommandSender sendi;
|
||||
RTPCommandType cmd;
|
||||
RTPCommand cmd;
|
||||
private static final HandlerList handler = new HandlerList();
|
||||
|
||||
public RTP_CommandEvent(CommandSender sendi, RTPCommandType cmd) {
|
||||
public RTP_CommandEvent(CommandSender sendi, RTPCommand cmd) {
|
||||
this.sendi = sendi;
|
||||
this.cmd = cmd;
|
||||
}
|
||||
@ -20,7 +21,7 @@ public class RTP_CommandEvent extends Event {
|
||||
return sendi;
|
||||
}
|
||||
|
||||
public RTPCommandType getCmd() {
|
||||
public RTPCommand getCmd() {
|
||||
return cmd;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user