package de.warking.bausystem.commands; import com.sk89q.worldedit.CuboidClipboard; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.blocks.BaseBlock; import com.sk89q.worldedit.bukkit.BukkitWorld; import com.sk89q.worldedit.bukkit.selections.CuboidSelection; import com.sk89q.worldedit.schematic.MCEditSchematicFormat; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import de.pro_crafting.commandframework.Command; import de.pro_crafting.commandframework.CommandArgs; import de.warking.bausystem.BauSystem; import de.warking.bausystem.world.BauWorld; import de.warking.bausystem.world.Permission; import de.warking.hunjy.MySQL.Bauwelt; import de.warking.hunjy.MySQL.BauweltMember; import de.warking.hunjy.MySQL.WarkingUser; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; import java.io.File; import java.io.IOException; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; public class CommandBau { @Command(name = "bau", aliases = {"bau.help", "gs", "gs.help"}, inGameOnly = true) public void onHelp(CommandArgs args) { Player p = args.getPlayer(); p.sendMessage(BauSystem.PREFIX + "Hilfeseite 1 von 2:"); p.sendMessage("§6/bau help §7- Zeigt dir diese Hilfe"); p.sendMessage("§6/bau help 2 §7- Zeigt dir die Hilfe zum Member-System"); p.sendMessage("§6/home §7- Teleportiert dich auf deine Welt"); p.sendMessage("§6/tnt §7- (de)aktiviert Explosionsschaden"); p.sendMessage("§6/fire §7- (de)aktiviert Feuerschaden"); p.sendMessage("§6/testblock §7- Erneuert den nächsten Testblock"); p.sendMessage("§6/reset §7- Setzt die derzeitige Region zurück"); p.sendMessage("§6/bau resetall §7- Setzt deine Welt zurück"); p.sendMessage("§6/bau replace §7- Ersetzt in einer Region Obsidian zu TNT und Grundgestein zu Schleim"); p.sendMessage("§6/bau tp §7- Teleportiert dich auf eine Welt"); p.sendMessage("§6/bau info §7- Informationen über die aktuelle Welt"); p.sendMessage("§6/speed §7- Ändert deine Fluggeschwindigkeit"); p.sendMessage("§6/nv §7- (de)aktiviert Nachtsicht"); p.sendMessage("§6/trace §7- Gibt einen Überblick über den TNT-Tracer"); //p.sendMessage("§6/bau gui §7- Öffnet eine GUI"); } @Command(name = "bau.help.2", aliases = {"gs.help.2", "bau.2", "gs.2"}, inGameOnly = true) public void onHelp2(CommandArgs args) { Player p = args.getPlayer(); p.sendMessage(BauSystem.PREFIX + "Hilfeseite 2 von 2:"); p.sendMessage("§6/bau addmember §7- Fügt zu deiner Welt einen Spieler hinzu"); p.sendMessage("§6/bau delmember §7- Entfernt einen Spieler von deiner Welt"); p.sendMessage("§6/bau togglebuild §7- Berechtigung zum Bauen, Spielmodus wechseln, /tp"); p.sendMessage("§6/bau togglewe §7- Berechtigung für: WorldEdit, /bau replace, /bau testblock"); p.sendMessage("§6/bau toggleworld §7- Berechtigung für: /bau reset, /trace, /fire, /tnt"); } @Command(name = "bau.home", aliases = {"gs.home", "home"}, inGameOnly = true) public void onHome(CommandArgs args) { Player p = args.getPlayer(); if (Bauwelt.getBauwelt(p.getUniqueId()) == null) { new Bauwelt(p.getUniqueId(), false, false); } if (Bukkit.getWorld(p.getUniqueId().toString()) == null){ p.sendMessage(BauSystem.PREFIX + "§aEinen Moment bitte... Deine Welt wird vorbereitet"); try { BauWorld.loadWorld(p.getUniqueId()); } catch (IOException e) { p.sendMessage(BauSystem.PREFIX + "§cBeim Laden der Welt ist ein Fehler aufgetreten"); e.printStackTrace(); return; } } p.teleport(Bukkit.getWorld(p.getUniqueId().toString()).getSpawnLocation()); Bukkit.getScheduler().scheduleSyncDelayedTask(BauSystem.getInstance(), () -> p.setGameMode(GameMode.CREATIVE),20L); } @Command(name = "bau.tp", aliases = "gs.tp", inGameOnly = true) public void onTp(CommandArgs args) { Player p = args.getPlayer(); if (args.length() == 0) { p.sendMessage(BauSystem.PREFIX + "/bau tp "); return; } UUID worldOwner = WarkingUser.get(args.getArgs(0)).getUUID(); if (!BauWorld.hasPermission(worldOwner, p, Permission.member)){ p.sendMessage(BauSystem.PREFIX + "§cDu darfst dich nicht auf diese Welt teleportieren"); return; } if (Bukkit.getWorld(worldOwner.toString()) == null){ p.sendMessage(BauSystem.PREFIX + "§aEinen Moment bitte... Die Welt wird vorbereitet"); try { BauWorld.loadWorld(worldOwner); } catch (IOException e) { p.sendMessage(BauSystem.PREFIX + "§cBeim Laden der Welt ist ein Fehler aufgetreten"); e.printStackTrace(); return; } } p.teleport(Bukkit.getWorld(worldOwner.toString()).getSpawnLocation()); Bukkit.getScheduler().scheduleSyncDelayedTask(BauSystem.getInstance(), () -> p.setGameMode(GameMode.CREATIVE), 20); } @Command(name = "bau.addmember", aliases = "gs.addmember", inGameOnly = true) public void onAdd(CommandArgs args) { Player p = args.getPlayer(); if (!hasWorld(p)){ return; }else if (args.length() == 0) { p.sendMessage(BauSystem.PREFIX + "/bau addmember "); return; } UUID id = WarkingUser.get(args.getArgs(0)).getUUID(); if (id == null) { p.sendMessage(BauSystem.PREFIX + "§cUnbekannter Spieler"); return; }else if (BauweltMember.getBauMember(p.getUniqueId(), id) != null) { p.sendMessage(BauSystem.PREFIX + "§cDieser Spieler ist bereits Mitglied auf deiner Welt"); return; } new BauweltMember(p.getUniqueId(), id, true, false, false, false, false); p.sendMessage(BauSystem.PREFIX + "§aDer Spieler wurde zu deiner Welt hinzugefügt"); Player z = Bukkit.getPlayer(id); if(z != null) z.sendMessage(BauSystem.PREFIX + "§aDu wurdest zu der Welt von §6" + p.getName() + " §ahinzugefügt"); } @Command(name = "bau.delmember", aliases = "gs.delmember", inGameOnly = true) public void onDel(CommandArgs args) { Player p = args.getPlayer(); if (args.length() == 0) { p.sendMessage(BauSystem.PREFIX + "/bau delmember "); return; } UUID id = WarkingUser.get(args.getArgs(0)).getUUID(); if(!toggleCheck(args, p, id)){ return; } BauweltMember target = BauweltMember.getBauMember(p.getUniqueId(), id); BauWorld.removePlayer(p, target); } /*@Command(name = "bau.gui", aliases = "gs.gui", inGameOnly = true) public boolean ongui(CommandArgs args) { final Player p = args.getPlayer(); p.openInventory(CommandGui.mainmenu()); return true; }*/ @Command(name = "bau.togglebuild", aliases = "gs.togglebuild", inGameOnly = true) public void onToggleBD(CommandArgs args) { Player p = args.getPlayer(); if (args.length() == 0) { p.sendMessage(BauSystem.PREFIX + "/bau togglebuild "); return; } UUID id = WarkingUser.get(args.getArgs(0)).getUUID(); if(!toggleCheck(args, p, id)){ return; } BauweltMember target = BauweltMember.getBauMember(p.getUniqueId(), id); BauWorld.toggleBuild(p, target); } @Command(name = "bau.togglewe", aliases = "gs.togglewe", inGameOnly = true) public void onToggleWE(CommandArgs args) { Player p = args.getPlayer(); if (args.length() == 0) { p.sendMessage(BauSystem.PREFIX + "/bau togglewe "); return; } UUID id = WarkingUser.get(args.getArgs(0)).getUUID(); if(!toggleCheck(args, p, id)){ return; } BauweltMember target = BauweltMember.getBauMember(p.getUniqueId(), id); BauWorld.toggleWE(p, target); } @Command(name = "bau.toggleworld", aliases = "gs.toggleworld", inGameOnly = true) public void onToggleTestblock(CommandArgs args) { Player p = args.getPlayer(); if (args.length() == 0) { p.sendMessage(BauSystem.PREFIX + "/bau toggleworld "); return; } UUID id = WarkingUser.get(args.getArgs(0)).getUUID(); if(!toggleCheck(args, p, id)){ return; } BauweltMember target = BauweltMember.getBauMember(p.getUniqueId(), id); BauWorld.toggleTestblock(p, target); } @Command(name = "bau.testblock", aliases = {"gs.testblock", "testblock"}, inGameOnly = true) public void onTestblock(CommandArgs args) { final Player p = args.getPlayer(); UUID worldOwner = BauWorld.getWorldUUID(p.getWorld()); if (!BauWorld.hasPermission(worldOwner, p, Permission.worldedit)){ p.sendMessage(BauSystem.PREFIX + "§cDu darfst hier nicht den Testblock erneuern"); return; } Location playerLocation = p.getLocation(); World playerWorld = p.getWorld(); for (ProtectedRegion rg : BauSystem.getWorldGuard().getRegionManager(playerWorld).getApplicableRegions(playerLocation)) { String rgID = rg.getId(); if(rgID.equalsIgnoreCase("resetall")) continue; Vector position = new Vector(Integer.parseInt(BauSystem.getPlugin().getRegionData.getString("regions." + rgID + ".position.X")), Integer.parseInt(BauSystem.getPlugin().getRegionData.getString("regions." + rgID + ".position.Y")), Integer.parseInt(BauSystem.getPlugin().getRegionData.getString("regions." + rgID + ".position.Z"))); File file = new File(BauSystem.getPlugin().getRegionData.getString("regions." + rgID + ".schematic.testblock")); pasteSchematic(p, file, position); p.sendMessage(BauSystem.PREFIX + "§aTestblock erneuert"); } } @Command(name = "bau.reset", aliases = {"gs.reset", "reset"}, inGameOnly = true) public void onReset(CommandArgs args) { final Player p = args.getPlayer(); UUID worldOwner = BauWorld.getWorldUUID(p.getWorld()); if (!BauWorld.hasPermission(worldOwner, p, Permission.world)){ p.sendMessage(BauSystem.PREFIX + "§cDu darfst hier keine Regionen erneuern"); return; } Location playerLocation = p.getLocation(); World playerWorld = p.getWorld(); for (ProtectedRegion rg : BauSystem.getWorldGuard().getRegionManager(playerWorld).getApplicableRegions(playerLocation)) { String rgID = rg.getId(); if(rgID.equalsIgnoreCase("resetall")) continue; Vector position = new Vector(Integer.parseInt(BauSystem.getPlugin().getRegionData.getString("regions." + rgID + ".position.X")), Integer.parseInt(BauSystem.getPlugin().getRegionData.getString("regions." + rgID + ".position.Y")), Integer.parseInt(BauSystem.getPlugin().getRegionData.getString("regions." + rgID + ".position.Z"))); File file = new File(BauSystem.getPlugin().getRegionData.getString("regions." + rgID + ".schematic.reset")); pasteSchematic(p, file, position); p.sendMessage(BauSystem.PREFIX + "§aRegion " + rgID + " wurde erneuert"); } } @Command(name = "bau.resetall", aliases = "gs.resetall", inGameOnly = true) public void onResetAll(CommandArgs args) { final Player p = args.getPlayer(); p.sendMessage(BauSystem.PREFIX + "§aDeine Welt wird zurückgesetzt. Einen Moment bitte"); BauWorld.unloadWorld(p.getUniqueId()); File directory = new File("plugins/BauSystem/worlds/" + p.getUniqueId().toString()); del(directory); File directory1 = new File("plugins/WorldGuard/worlds/" + p.getUniqueId().toString()); del(directory1); Bukkit.getScheduler().scheduleSyncDelayedTask(BauSystem.getInstance(), () -> onHome(args),20L); } @Command(name = "bau.replace", aliases = "gs.replace", inGameOnly = true) public void onReplace(CommandArgs args) { final Player p = args.getPlayer(); UUID worldOwner = BauWorld.getWorldUUID(p.getWorld()); if (!BauWorld.hasPermission(worldOwner, p, Permission.worldedit)){ p.sendMessage(BauSystem.PREFIX + "§cDu darfst hier nicht Obsidian und Grundgestein ersetzen"); return; } World world = p.getWorld(); for(ProtectedRegion rg : BauSystem.getWorldGuard().getRegionManager(world).getApplicableRegions(p.getLocation())) { String rgID = rg.getId(); if(rgID.equalsIgnoreCase("resetall")) continue; EditSession editSession = BauSystem.getWorldEdit().getWorldEdit().getEditSessionFactory().getEditSession(new BukkitWorld(p.getWorld()), Integer.MAX_VALUE); CuboidSelection selection = new CuboidSelection(p.getWorld(), new Location(p.getWorld(), rg.getMinimumPoint().getBlockX(), rg.getMinimumPoint().getBlockY(), rg.getMinimumPoint().getBlockZ()), new Location(p.getWorld(), rg.getMaximumPoint().getBlockX(), rg.getMaximumPoint().getBlockY(), rg.getMaximumPoint().getBlockZ())); Set targetObsidian = new HashSet<>(); targetObsidian.add(new BaseBlock(49)); Set targetBedrock = new HashSet<>(); targetBedrock.add(new BaseBlock(7)); try { int tnt = editSession.replaceBlocks(selection.getRegionSelector().getRegion(), targetObsidian, new BaseBlock(46)); int slime = editSession.replaceBlocks(selection.getRegionSelector().getRegion(), targetBedrock, new BaseBlock(165)); editSession.flushQueue(); p.sendMessage(BauSystem.PREFIX + "§aEs wurden " + (tnt + slime) + " Obsidian und Grundgestein ersetzt"); } catch(Exception ex) { ex.printStackTrace(); } } } @Command(name = "bau.info", aliases = "gs.info", inGameOnly = true) public void onInfo(CommandArgs args) { final Player p = args.getPlayer(); UUID worldOwner = BauWorld.getWorldUUID(p.getWorld()); if(worldOwner == null){ p.sendMessage(BauSystem.PREFIX + "§cDu bist auf keiner Bauwelt"); return; } Bukkit.getScheduler().runTaskAsynchronously(BauSystem.getInstance(), () -> { Bauwelt welt = Bauwelt.getBauwelt(worldOwner); p.sendMessage("§6Besitzer§8: §6" + WarkingUser.get(welt.getUserID()).getUserName()); if(welt.isTNTDmg()) p.sendMessage("§6TNT-Schaden§8: §aerlaubt"); else p.sendMessage("§6TNT-Schaden§8: §cverboten"); if(welt.isFireDmg()) p.sendMessage("§6Feuer-Schaden§8: §aerlaubt"); else p.sendMessage("§6Feuer-Schaden§8: §cverboten"); List memberList = BauweltMember.getMembers(worldOwner); if(!memberList.isEmpty()){ StringBuilder members = new StringBuilder(); members.append("Mitglieder§8: "); for(BauweltMember member : memberList){ members.append("§6"); members.append(WarkingUser.get(member.getMemberID()).getUserName()); members.append("§8, "); } p.sendMessage(members.toString()); } }); } @Command(name = "bau.tntdmg", aliases = {"gs.tntdmg", "bau.tnt", "gs.tnt", "tnt"}, inGameOnly = true) public void onTntdmg(CommandArgs args){ BauWorld.switchTNT(args.getPlayer()); } @Command(name = "bau.firedmg", aliases = {"gs.firedmg", "bau.fire", "gs.fire", "fire"}, inGameOnly = true) public void onFiredmg(CommandArgs args) { BauWorld.switchFire(args.getPlayer()); } @Command(name = "bau.speed", aliases = {"gs.speed", "speed"}, inGameOnly = true) public void onSpeed(CommandArgs args){ final Player player = args.getPlayer(); if (args.length() == 0){ player.sendMessage(BauSystem.PREFIX + "/speed [Geschwindigkeit]"); return; } float speed; try{ speed = Float.valueOf(args.getArgs(0)); }catch(NumberFormatException e){ player.sendMessage(BauSystem.PREFIX + "§cBitte gib eine Zahl zwischen 0 und 10 an"); return; } if (speed < 0 || speed > 10) { player.sendMessage(BauSystem.PREFIX + "§cBitte gib eine Zahl zwischen 0 und 10 an"); return; } player.sendMessage("§aGeschwindigkeit wurde auf §6" + speed + " §agesetzt"); if(speed == 1.0f){ speed = 1.25f; } player.setFlySpeed(speed / 10); player.setWalkSpeed(speed / 10); } @Command(name = "bau.time", inGameOnly = true) public void onTime(CommandArgs args){ Player p = args.getPlayer(); if(args.length() == 0){ p.sendMessage(BauSystem.PREFIX + "/time "); return; } UUID worldOwner = BauWorld.getWorldUUID(p.getWorld()); if (!BauWorld.hasPermission(worldOwner, p, Permission.world)){ p.sendMessage(BauSystem.PREFIX + "§cDu darfst hier nicht die Zeit ändern"); return; } int time; try{ time = Integer.valueOf(args.getArgs(0)); }catch(NumberFormatException e){ p.sendMessage(BauSystem.PREFIX + "§cBitte gib eine Zahl zwischen 0 und 24000 an"); return; } if (time < 0 || time > 24000) { p.sendMessage(BauSystem.PREFIX + "§cBitte gib eine Zahl zwischen 0 und 24000 an"); return; } p.getWorld().setTime(time); } private void pasteSchematic(Player player, File schematic, Vector position) { int count = 0; World world = player.getWorld(); for(ProtectedRegion rg: BauSystem.getWorldGuard().getRegionManager(world).getApplicableRegions(player.getLocation())) { count++; if(count != 0) { EditSession session = BauSystem.getWorldEdit().getWorldEdit().getEditSessionFactory().getEditSession(new BukkitWorld(world), Integer.MAX_VALUE); try { CuboidClipboard format = MCEditSchematicFormat.getFormat(schematic).load(schematic); format.paste(session, position, false); } catch (Exception ex) { player.sendMessage(ex.getMessage()); ex.printStackTrace(); } } } } private void del(File dir){ if (dir.isDirectory()){ String[] entries = dir.list(); for (String entry : entries) { File aktFile = new File(dir.getPath(), entry); del(aktFile); } dir.delete(); } else{ dir.delete(); } } private boolean hasWorld(Player p){ if (Bauwelt.getBauwelt(p.getUniqueId()).getUUID() == null) { p.sendMessage(BauSystem.PREFIX + "§cDu hast keine Bauwelt"); return false; } return true; } private boolean toggleCheck(CommandArgs args, Player p, UUID id){ if (!hasWorld(p)) { //p.sendMessage(BauSystem.PREFIX + "§cDu hast noch keine Bauwelt"); return false; } if (id == null) { p.sendMessage(BauSystem.PREFIX + "§cUnbekannter Spieler"); return false; } BauweltMember target = BauweltMember.getBauMember(p.getUniqueId(), id); if (target == null) { p.sendMessage(BauSystem.PREFIX + "§cDer Spieler ist kein Mitglied deiner Welt"); return false; } return true; } }