From ade7fb860e4e5a0d0ae5af70f517d8859d3f4263 Mon Sep 17 00:00:00 2001 From: Yaruma3341 Date: Wed, 27 Mar 2019 22:15:24 +0100 Subject: [PATCH] added command blocker; Schematic Command (unfinished) Signed-off-by: yaruma3341 --- schematicsystem.iml | 25 ---- .../schematicsystem/SchematicSystem.java | 41 +++++- .../commands/SchematicCommand.java | 133 ++++++++++++++++++ .../schematicsystem/utils/CommandRemover.java | 37 +++++ src/plugin.yml | 5 + 5 files changed, 215 insertions(+), 26 deletions(-) delete mode 100644 schematicsystem.iml create mode 100644 src/de/warking/schematicsystem/commands/SchematicCommand.java create mode 100644 src/de/warking/schematicsystem/utils/CommandRemover.java diff --git a/schematicsystem.iml b/schematicsystem.iml deleted file mode 100644 index 73f0348..0000000 --- a/schematicsystem.iml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/de/warking/schematicsystem/SchematicSystem.java b/src/de/warking/schematicsystem/SchematicSystem.java index 70f8d5a..8ce60fb 100644 --- a/src/de/warking/schematicsystem/SchematicSystem.java +++ b/src/de/warking/schematicsystem/SchematicSystem.java @@ -1,4 +1,43 @@ package de.warking.schematicsystem; -public class SchematicSystem { +import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import de.warking.schematicsystem.commands.SchematicCommand; +import de.warking.schematicsystem.utils.CommandRemover; +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; + +public class SchematicSystem extends JavaPlugin { + + public static String SCHEM_DIR = "/home/netuser/schematics/"; + public static String PREFIX = "§8[§3Schematic§8] §7"; + + private static SchematicSystem instance; + + public void onEnable() { + instance = this; + + try { + CommandRemover.removeAll("/schematic", "/schem", "//schematic", "//schem"); + } catch (Exception ex) { + ex.printStackTrace(); + } + + getCommand("schematic").setExecutor(new SchematicCommand()); + getCommand("/schematic").setExecutor(new SchematicCommand()); + getCommand("schem").setExecutor(new SchematicCommand()); + getCommand("/schem").setExecutor(new SchematicCommand()); + } + + public void onDisable() { + + } + + + public static SchematicSystem getInstance() { + return instance; + } + + public static WorldEditPlugin getWorldEditPlugin() { + return (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit"); + } } diff --git a/src/de/warking/schematicsystem/commands/SchematicCommand.java b/src/de/warking/schematicsystem/commands/SchematicCommand.java new file mode 100644 index 0000000..30aa68e --- /dev/null +++ b/src/de/warking/schematicsystem/commands/SchematicCommand.java @@ -0,0 +1,133 @@ +package de.warking.schematicsystem.commands; + +import com.boydti.fawe.FaweAPI; +import com.sk89q.worldedit.session.ClipboardHolder; +import de.warking.hunjy.MySQL.Schematic; +import de.warking.schematicsystem.SchematicSystem; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +public class SchematicCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + + if(!(sender instanceof Player)) { + return false; + } + + Player player = (Player) sender; + + switch (args.length) { + case 0: + sendHelp(player); + break; + + case 1: + if(args[0].equalsIgnoreCase("list")) { + sendPlayerScheamticList(0, 15, player); + break; + } + break; + + case 2: + if(args[0].equalsIgnoreCase("list")) { + sendPlayerScheamticList(Integer.parseInt(args[1]), 15, player); + return false; + } + + if(args[0].equalsIgnoreCase("load")) { + if(Schematic.getSchemFromDB(args[1], player.getUniqueId()) != null) { + //load schematic to player clipboard + + try { + SchematicSystem.getWorldEditPlugin().getSession(player).setClipboard((ClipboardHolder) FaweAPI.load(new File(SchematicSystem.PREFIX + args[1])).getClipboard()); + player.sendMessage(SchematicSystem.PREFIX + "Schematic §6" + args[1] + " §7geladen."); + } catch (IOException ex) { + ex.printStackTrace(); + } + + break; + } else { + player.sendMessage(SchematicSystem.PREFIX + "§cDie angegebene Schematic existiert nicht!"); + break; + } + } + + if(args[0].equalsIgnoreCase("delete")) { + File file = new File(SchematicSystem.SCHEM_DIR + args[1] + ".schematic"); + file.delete(); + player.sendMessage(SchematicSystem.PREFIX + "Schematic §6" + args[1] + "§7gelöscht."); + break; + } + + if(args[0].equalsIgnoreCase("save")) { + //save schematic + } + break; + } + return false; + } + + public void sendHelp(Player player) { + player.sendMessage(SchematicSystem.PREFIX + "Befehle:"); + player.sendMessage("§8//schem - §6Zeigt Informationen zum Plugin"); + player.sendMessage("§8//schem help - §6Zeigt eine Liste mit Befehlen"); + player.sendMessage("§8//schem list - §6Listet deine Schematics auf"); + player.sendMessage("§8//schem load [Besitzer] - §6Du lädst eine Schematic"); + player.sendMessage("§8//schem save - §6Du speicherst dein Clipboard als Datei"); + player.sendMessage("§8//schem changetype - §6Ändert den Typ deiner Schematic"); + player.sendMessage("§8//schem info - §6Zeigt dir Informationen zu der Schematic"); + player.sendMessage("§8//schem delete - §6Löscht eine Schematic"); + player.sendMessage("§8//schem addmember - §6Fügt einen Spieler zu einer Schematic hinzu"); + player.sendMessage("§8//schem delmember - §6Entfernt einen Spieler von einer Schematic"); + + if (player.hasPermission("schemorg.help")) { + player.sendMessage(SchematicSystem.PREFIX + "§cTeambefehle:"); + player.sendMessage("§8//schem lock - §6Sperrt eine Schematic"); + player.sendMessage("§8//schem unlock - §6Entsperrt eine Schematic"); + } + + } + + public static void sendPlayerScheamticList(int currentPage, int filesPerPage, Player player) { + List schematicList = Schematic.getSchemsAccessibleByUser(player.getUniqueId()); + + int pages = schematicList.size() / filesPerPage; + int currPage = currentPage; + if(currPage > pages) { + currPage = 0; + } + + for(int i = currPage * filesPerPage; i < (currPage * filesPerPage) + filesPerPage; i++) { + + TextComponent schematics = new TextComponent(schematicList.get(i).getSchemName()); + schematics.setColor(ChatColor.AQUA); + schematics.setBold(true); + + schematics.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Schematic laden...").create())); + schematics.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "schematic load " + schematicList.get(i).getSchemName())); //COMMAND MISSING + + player.spigot().sendMessage(schematics); + } + + TextComponent nextPage = new TextComponent(">> Naechste Seite <<"); + nextPage.setColor(ChatColor.RED); + + nextPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Naechste Seite...").create())); + nextPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "schematic list " + currentPage + 1)); //COMMAND MISSING + + player.spigot().sendMessage(nextPage); + } +} diff --git a/src/de/warking/schematicsystem/utils/CommandRemover.java b/src/de/warking/schematicsystem/utils/CommandRemover.java new file mode 100644 index 0000000..11dca31 --- /dev/null +++ b/src/de/warking/schematicsystem/utils/CommandRemover.java @@ -0,0 +1,37 @@ +package de.warking.schematicsystem.utils; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.SimpleCommandMap; + +import java.lang.reflect.Field; +import java.util.Map; + +public class CommandRemover { + + private static String packageName = Bukkit.getServer().getClass().getPackage().getName(); + private static String version = packageName.substring(packageName.lastIndexOf(".") + 1); + + public static void removeAll(String... cmds) throws Exception { + for (int i = 0; i < cmds.length; i++) + removeCommand(cmds[i]); + } + + + public static boolean removeCommand(String command) throws Exception { + Class serverClass = Class.forName("org.bukkit.craftbukkit." + version + ".CraftServer"); + + Field f1 = serverClass.getDeclaredField("commandMap"); + f1.setAccessible(true); + SimpleCommandMap commandMap = (SimpleCommandMap) f1.get(Bukkit.getServer()); + + Field f2 = SimpleCommandMap.class.getDeclaredField("knownCommands"); + f2.setAccessible(true); + Map knownCommands = (Map) f2.get(commandMap); + + return knownCommands.remove(command.toLowerCase()) != null; + } + + + +} diff --git a/src/plugin.yml b/src/plugin.yml index e69de29..189aae7 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -0,0 +1,5 @@ +name: SchematicSystem +version: 1.0 +author: [Yaruma3341, Lixfel] + +main: de.warking.schematicsystem.SchematicSystem \ No newline at end of file