Merge branch 'database' of Etzelia/Mixtape into master
commit
dbd7a73a15
|
@ -9,3 +9,4 @@ Changelogs
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
v1.0 <v1.0>
|
v1.0 <v1.0>
|
||||||
|
v2.0 <v2.0>
|
|
@ -0,0 +1,14 @@
|
||||||
|
.. include:: ../common.rst
|
||||||
|
|
||||||
|
.. _mixtape_v2.0:
|
||||||
|
|
||||||
|
Mixtape v2.0
|
||||||
|
========
|
||||||
|
|
||||||
|
Additions
|
||||||
|
---------
|
||||||
|
Added H2 database support!
|
||||||
|
|
||||||
|
Bug Fixes
|
||||||
|
---------
|
||||||
|
None
|
11
pom.xml
11
pom.xml
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<groupId>xyz.etztech</groupId>
|
<groupId>xyz.etztech</groupId>
|
||||||
<artifactId>Mixtape</artifactId>
|
<artifactId>Mixtape</artifactId>
|
||||||
<version>1.0</version>
|
<version>2.0</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>Mixtape</name>
|
<name>Mixtape</name>
|
||||||
|
@ -39,9 +39,6 @@
|
||||||
<goals>
|
<goals>
|
||||||
<goal>shade</goal>
|
<goal>shade</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
|
||||||
<minimizeJar>true</minimizeJar>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
@ -72,5 +69,11 @@
|
||||||
<version>1.13.1-R0.1-SNAPSHOT</version>
|
<version>1.13.1-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>xyz.etztech</groupId>
|
||||||
|
<artifactId>EtzCore</artifactId>
|
||||||
|
<version>1.0.5</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -2,27 +2,40 @@ package xyz.etztech.mixtape;
|
||||||
|
|
||||||
public class Alias {
|
public class Alias {
|
||||||
|
|
||||||
private String alias;
|
private String uuid;
|
||||||
private String command;
|
private String from;
|
||||||
|
private String to;
|
||||||
|
private Database.AliasType type;
|
||||||
|
|
||||||
public String getAlias() {
|
public String getUuid() {
|
||||||
return alias;
|
return uuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAlias(String alias) {
|
public void setUuid(String uuid) {
|
||||||
this.alias = alias;
|
this.uuid = uuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCommand() {
|
public String getFrom() {
|
||||||
return command;
|
return from;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCommand(String command) {
|
public void setFrom(String from) {
|
||||||
this.command = command;
|
this.from = from;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public String getTo() {
|
||||||
public String toString() {
|
return to;
|
||||||
return alias + " -> " + command;
|
}
|
||||||
|
|
||||||
|
public void setTo(String to) {
|
||||||
|
this.to = to;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Database.AliasType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(Database.AliasType type) {
|
||||||
|
this.type = type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,122 @@
|
||||||
|
package xyz.etztech.mixtape;
|
||||||
|
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import xyz.etztech.core.db.DataSource;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Database extends DataSource {
|
||||||
|
|
||||||
|
public enum AliasType {
|
||||||
|
CHAT, COMMAND
|
||||||
|
}
|
||||||
|
|
||||||
|
public Database(JavaPlugin plugin) {
|
||||||
|
super(plugin);
|
||||||
|
create();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void create() {
|
||||||
|
try {
|
||||||
|
Connection connection = getConnection();
|
||||||
|
final String CREATE = "CREATE TABLE IF NOT EXISTS `aliases` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `uuid` VARCHAR(36) NOT NULL, `from` VARCHAR(200) NOT NULL, `to` VARCHAR(200) NOT NULL, `type` VARCHAR(6) NOT NULL );";
|
||||||
|
PreparedStatement pst = connection.prepareStatement(CREATE);
|
||||||
|
pst.execute();
|
||||||
|
connection.close();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void insert(String uuid, String from, String to, AliasType type) {
|
||||||
|
try {
|
||||||
|
int existingId = exists(uuid, from);
|
||||||
|
if (existingId > 0) {
|
||||||
|
delete(existingId);
|
||||||
|
}
|
||||||
|
Connection connection = getConnection();
|
||||||
|
final String MERGE = "INSERT INTO `aliases` (`uuid`, `from`, `to`, `type`) VALUES (?, ?, ?, ?);";
|
||||||
|
PreparedStatement pst = connection.prepareStatement(MERGE);
|
||||||
|
pst.setString(1, uuid);
|
||||||
|
pst.setString(2, from.toLowerCase());
|
||||||
|
pst.setString(3, to);
|
||||||
|
pst.setString(4, type.name());
|
||||||
|
pst.executeUpdate();
|
||||||
|
connection.close();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void purge(String uuid) {
|
||||||
|
try {
|
||||||
|
Connection connection = getConnection();
|
||||||
|
final String PURGE = "DELETE FROM `aliases` WHERE `uuid` = ?;";
|
||||||
|
PreparedStatement pst = connection.prepareStatement(PURGE);
|
||||||
|
pst.setString(1, uuid);
|
||||||
|
pst.executeUpdate();
|
||||||
|
connection.close();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Alias> getAliases(String uuid) {
|
||||||
|
List<Alias> results = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
Connection connection = getConnection();
|
||||||
|
final String SELECT = "SELECT `uuid`, `from`, `to`, `type` FROM `aliases` WHERE `uuid` = ?;";
|
||||||
|
PreparedStatement pst = connection.prepareStatement(SELECT);
|
||||||
|
pst.setString(1, uuid);
|
||||||
|
ResultSet rs = pst.executeQuery();
|
||||||
|
while (rs.next()) {
|
||||||
|
Alias alias = new Alias();
|
||||||
|
alias.setUuid(uuid);
|
||||||
|
alias.setFrom(rs.getString("from"));
|
||||||
|
alias.setTo(rs.getString("to"));
|
||||||
|
alias.setType(AliasType.valueOf(rs.getString("type")));
|
||||||
|
results.add(alias);
|
||||||
|
}
|
||||||
|
connection.close();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int exists(String uuid, String from) {
|
||||||
|
try {
|
||||||
|
Connection connection = getConnection();
|
||||||
|
final String SELECT = "SELECT `id` FROM `aliases` WHERE `uuid` = ? AND `from` = ?;";
|
||||||
|
PreparedStatement pst = connection.prepareStatement(SELECT);
|
||||||
|
pst.setString(1, uuid);
|
||||||
|
pst.setString(2, from.toLowerCase());
|
||||||
|
ResultSet rs = pst.executeQuery();
|
||||||
|
if (rs.next()) {
|
||||||
|
return rs.getInt("id");
|
||||||
|
}
|
||||||
|
connection.close();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void delete(int id) {
|
||||||
|
try {
|
||||||
|
Connection connection = getConnection();
|
||||||
|
final String DELETE = "DELETE FROM `aliases` WHERE `id` = ?;";
|
||||||
|
PreparedStatement pst = connection.prepareStatement(DELETE);
|
||||||
|
pst.setInt(1, id);
|
||||||
|
pst.executeUpdate();
|
||||||
|
connection.close();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -4,9 +4,10 @@ import org.bukkit.Bukkit;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import xyz.etztech.mixtape.commands.CommandAlias;
|
import xyz.etztech.mixtape.commands.CommandAlias;
|
||||||
import xyz.etztech.mixtape.commands.CommandSlashAlias;
|
|
||||||
import xyz.etztech.mixtape.commands.CommandMixtape;
|
import xyz.etztech.mixtape.commands.CommandMixtape;
|
||||||
|
import xyz.etztech.mixtape.commands.CommandSlashAlias;
|
||||||
import xyz.etztech.mixtape.listeners.CommandPreprocessListener;
|
import xyz.etztech.mixtape.listeners.CommandPreprocessListener;
|
||||||
|
import xyz.etztech.mixtape.listeners.PlayerJoinListener;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
@ -17,6 +18,7 @@ public final class Mixtape extends JavaPlugin {
|
||||||
|
|
||||||
private static Mixtape instance;
|
private static Mixtape instance;
|
||||||
public static FileConfiguration config;
|
public static FileConfiguration config;
|
||||||
|
private static Database database;
|
||||||
|
|
||||||
private static int loops;
|
private static int loops;
|
||||||
|
|
||||||
|
@ -30,12 +32,14 @@ public final class Mixtape extends JavaPlugin {
|
||||||
instance = this;
|
instance = this;
|
||||||
saveDefaultConfig();
|
saveDefaultConfig();
|
||||||
reloadConfig();
|
reloadConfig();
|
||||||
|
database = new Database(this);
|
||||||
|
|
||||||
this.getCommand("mixtape").setExecutor(new CommandMixtape(this));
|
this.getCommand("mixtape").setExecutor(new CommandMixtape(this));
|
||||||
this.getCommand("alias").setExecutor(new CommandAlias(this));
|
this.getCommand("alias").setExecutor(new CommandAlias(this));
|
||||||
this.getCommand("/alias").setExecutor(new CommandSlashAlias(this));
|
this.getCommand("/alias").setExecutor(new CommandSlashAlias(this));
|
||||||
|
|
||||||
getServer().getPluginManager().registerEvents(new CommandPreprocessListener(this), this);
|
getServer().getPluginManager().registerEvents(new CommandPreprocessListener(this), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -51,6 +55,7 @@ public final class Mixtape extends JavaPlugin {
|
||||||
validate();
|
validate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void log(String message) {
|
public void log(String message) {
|
||||||
log.info( "[Mixtape]: " + message );
|
log.info( "[Mixtape]: " + message );
|
||||||
}
|
}
|
||||||
|
@ -59,6 +64,26 @@ public final class Mixtape extends JavaPlugin {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Database getDatabase() {
|
||||||
|
return database;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void loadAliases(String uuid) {
|
||||||
|
Map<String, String> chats = new HashMap<>();
|
||||||
|
Map<String, String> commands = new HashMap<>();
|
||||||
|
List<Alias> aliases = database.getAliases(uuid);
|
||||||
|
for (Alias alias : aliases) {
|
||||||
|
if (alias.getType().equals(Database.AliasType.CHAT)) {
|
||||||
|
chats.put(alias.getFrom(), alias.getTo());
|
||||||
|
} else if (alias.getType().equals(Database.AliasType.COMMAND)) {
|
||||||
|
commands.put(alias.getFrom(), alias.getTo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
chatAliases.put(uuid, chats);
|
||||||
|
commandAliases.put(uuid, commands);
|
||||||
|
Bukkit.getConsoleSender().sendMessage(String.format("Loaded %s aliases for %s", aliases.size(), uuid));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void setCommandAlias(String uuid, String alias, String command) {
|
public static void setCommandAlias(String uuid, String alias, String command) {
|
||||||
Map<String, String> map = new HashMap<>();
|
Map<String, String> map = new HashMap<>();
|
||||||
|
@ -67,6 +92,7 @@ public final class Mixtape extends JavaPlugin {
|
||||||
}
|
}
|
||||||
map.put(alias, command);
|
map.put(alias, command);
|
||||||
commandAliases.put(uuid, map);
|
commandAliases.put(uuid, map);
|
||||||
|
database.insert(uuid, alias, command, Database.AliasType.COMMAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String, String> getCommandAliases(String uuid) {
|
public static Map<String, String> getCommandAliases(String uuid) {
|
||||||
|
@ -81,6 +107,7 @@ public final class Mixtape extends JavaPlugin {
|
||||||
}
|
}
|
||||||
map.put(alias, command);
|
map.put(alias, command);
|
||||||
chatAliases.put(uuid, map);
|
chatAliases.put(uuid, map);
|
||||||
|
database.insert(uuid, alias, command, Database.AliasType.CHAT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String, String> getChatAliases(String uuid) {
|
public static Map<String, String> getChatAliases(String uuid) {
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
package xyz.etztech.mixtape.commands;
|
package xyz.etztech.mixtape.commands;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import xyz.etztech.mixtape.Mixtape;
|
import xyz.etztech.mixtape.Mixtape;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -28,6 +31,21 @@ public class CommandMixtape implements CommandExecutor {
|
||||||
if ("reload".equalsIgnoreCase(args[0])) {
|
if ("reload".equalsIgnoreCase(args[0])) {
|
||||||
plugin.reloadConfig();
|
plugin.reloadConfig();
|
||||||
sender.sendMessage(ChatColor.GREEN + "Mixtape Reloaded.");
|
sender.sendMessage(ChatColor.GREEN + "Mixtape Reloaded.");
|
||||||
|
} else if ("purge".equalsIgnoreCase(args[0])) {
|
||||||
|
if (args.length > 1) {
|
||||||
|
Player player = Bukkit.getPlayerExact(args[1]);
|
||||||
|
if (player != null) {
|
||||||
|
Mixtape.getDatabase().purge(player.getUniqueId().toString());
|
||||||
|
sender.sendMessage(ChatColor.GREEN + "Purged all of " + player.getName() + "'s aliases.");
|
||||||
|
} else {
|
||||||
|
sender.sendMessage(ChatColor.RED + "No player found.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (OfflinePlayer offline : Bukkit.getBannedPlayers()) {
|
||||||
|
Mixtape.getDatabase().purge(offline.getUniqueId().toString());
|
||||||
|
}
|
||||||
|
sender.sendMessage(ChatColor.GREEN + "Purged all banned players' aliases.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package xyz.etztech.mixtape.listeners;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
import xyz.etztech.mixtape.Mixtape;
|
||||||
|
|
||||||
|
public class PlayerJoinListener implements Listener {
|
||||||
|
|
||||||
|
|
||||||
|
Mixtape plugin;
|
||||||
|
|
||||||
|
public PlayerJoinListener(Mixtape plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority= EventPriority.HIGH, ignoreCancelled=true)
|
||||||
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
Mixtape.loadAliases(player.getUniqueId().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue