From 2f123d9a97d71d6793b8ae1db93eb177ce280514 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Fri, 11 Dec 2020 14:33:00 +0100 Subject: [PATCH 1/3] Refactoring sections.yml, Adding Region.paste to player history --- .../steamwar/bausystem/world/Region_12.java | 11 +- .../steamwar/bausystem/world/Region_15.java | 11 +- .../src/de/steamwar/bausystem/BauSystem.java | 27 +-- .../bausystem/commands/CommandProtect.java | 27 ++- .../bausystem/commands/CommandReset.java | 10 +- .../bausystem/commands/CommandTestblock.java | 37 ++-- .../bausystem/world/ArenaSection.java | 65 ------ .../de/steamwar/bausystem/world/Region.java | 206 +++++++++++++----- .../bausystem/world/RegionListener.java | 31 +-- 9 files changed, 226 insertions(+), 199 deletions(-) delete mode 100644 BauSystem_Main/src/de/steamwar/bausystem/world/ArenaSection.java diff --git a/BauSystem_12/src/de/steamwar/bausystem/world/Region_12.java b/BauSystem_12/src/de/steamwar/bausystem/world/Region_12.java index 5170fb2..0330428 100644 --- a/BauSystem_12/src/de/steamwar/bausystem/world/Region_12.java +++ b/BauSystem_12/src/de/steamwar/bausystem/world/Region_12.java @@ -23,6 +23,7 @@ import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.BukkitWorld; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; import com.sk89q.worldedit.function.operation.Operations; @@ -30,16 +31,17 @@ import com.sk89q.worldedit.math.transform.AffineTransform; import com.sk89q.worldedit.session.ClipboardHolder; import com.sk89q.worldedit.world.World; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Objects; -public class Region_12 { +class Region_12 { private Region_12(){} - static void paste(File file, int x, int y, int z, boolean rotate){ + static void paste(Player player, File file, int x, int y, int z, boolean rotate){ World w = new BukkitWorld(Bukkit.getWorlds().get(0)); Clipboard clipboard; try { @@ -48,10 +50,10 @@ public class Region_12 { throw new SecurityException("Bausystem schematic not found", e); } - paste(clipboard, x, y, z, rotate); + paste(player, clipboard, x, y, z, rotate); } - static void paste(Clipboard clipboard, int x, int y, int z, boolean rotate){ + static void paste(Player player, Clipboard clipboard, int x, int y, int z, boolean rotate){ World w = new BukkitWorld(Bukkit.getWorlds().get(0)); Vector dimensions = clipboard.getDimensions(); @@ -70,5 +72,6 @@ public class Region_12 { ch.setTransform(aT); Operations.completeBlindly(ch.createPaste(e, w.getWorldData()).to(v).build()); e.flushQueue(); + ((WorldEditPlugin) Bukkit.getServer().getPluginManager() .getPlugin("WorldEdit")).getSession(player).remember(e); } } diff --git a/BauSystem_15/src/de/steamwar/bausystem/world/Region_15.java b/BauSystem_15/src/de/steamwar/bausystem/world/Region_15.java index e2998ec..6839f0e 100644 --- a/BauSystem_15/src/de/steamwar/bausystem/world/Region_15.java +++ b/BauSystem_15/src/de/steamwar/bausystem/world/Region_15.java @@ -23,6 +23,7 @@ import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitWorld; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats; import com.sk89q.worldedit.function.operation.Operations; @@ -37,16 +38,17 @@ import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.bukkit.craftbukkit.v1_15_R1.CraftWorld; import org.bukkit.craftbukkit.v1_15_R1.block.data.CraftBlockData; +import org.bukkit.entity.Player; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Objects; -public class Region_15 { +class Region_15 { private Region_15(){} - static void paste(File file, int x, int y, int z, boolean rotate){ + static void paste(Player player, File file, int x, int y, int z, boolean rotate){ Clipboard clipboard; try { clipboard = Objects.requireNonNull(ClipboardFormats.findByFile(file)).getReader(new FileInputStream(file)).read(); @@ -54,10 +56,10 @@ public class Region_15 { throw new SecurityException("Bausystem schematic not found", e); } - paste(clipboard, x, y, z, rotate); + paste(player, clipboard, x, y, z, rotate); } - static void paste(Clipboard clipboard, int x, int y, int z, boolean rotate){ + static void paste(Player player, Clipboard clipboard, int x, int y, int z, boolean rotate){ BlockVector3 dimensions = clipboard.getDimensions(); BlockVector3 v = BlockVector3.at(x, y, z); BlockVector3 offset = clipboard.getRegion().getMinimumPoint().subtract(clipboard.getOrigin()); @@ -74,6 +76,7 @@ public class Region_15 { ch.setTransform(aT); Operations.completeBlindly(ch.createPaste(e).to(v).build()); e.flushSession(); + ((WorldEditPlugin) Objects.requireNonNull(Bukkit.getServer().getPluginManager().getPlugin("WorldEdit"))).getSession(player).remember(e); } static void fastpaste(File file, int x, int y, int z, boolean rotate){ diff --git a/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java b/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java index 45641d7..d62aab6 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java @@ -32,7 +32,6 @@ import org.bukkit.Bukkit; import org.bukkit.GameRule; import org.bukkit.Material; import org.bukkit.attribute.Attribute; -import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -46,19 +45,14 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitTask; -import java.io.File; -import java.io.IOException; import java.util.Arrays; -import java.util.List; import java.util.UUID; import java.util.logging.Level; public class BauSystem extends JavaPlugin implements Listener { private static BauSystem plugin; private static UUID owner; - private static List sections; public static final String PREFIX = "§eBauSystem§8» §7"; - public static final String SECTION_PATH = "/home/minecraft/backbone/server/UserBau/"; private BukkitTask autoShutdown; @@ -66,23 +60,10 @@ public class BauSystem extends JavaPlugin implements Listener { public void onEnable() { plugin = this; - String worldName = Bukkit.getWorlds().get(0).getName(); try { - owner = UUID.fromString(worldName); - sections = ArenaSection.loadFromFile(new File(Bukkit.getWorldContainer().getPath() + '/' + getOwner().toString() + "/sections.yml")); + owner = UUID.fromString(Bukkit.getWorlds().get(0).getName()); } catch (IllegalArgumentException e) { - try { - owner = null; - sections = ArenaSection.loadFromFile(new File(Bukkit.getWorldContainer().getPath() + '/' + worldName + "/sections.yml")); - } catch (IOException | InvalidConfigurationException ex) { - getLogger().log(Level.SEVERE, "owner is no UUID / failed to load sections.yml", e); - Bukkit.shutdown(); - return; - } - } catch (InvalidConfigurationException | IOException e) { - getLogger().log(Level.SEVERE, "Failed to load sections.yml", e); - Bukkit.shutdown(); - return; + owner = null; } try { @@ -160,10 +141,6 @@ public class BauSystem extends JavaPlugin implements Listener { return owner; } - public static List getSections() { - return sections; - } - public static int getOwnerID() { return SteamwarUser.get(getOwner()).getId(); } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandProtect.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandProtect.java index b24b8e8..8e0bb6b 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandProtect.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandProtect.java @@ -21,13 +21,17 @@ package de.steamwar.bausystem.commands; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.Permission; -import de.steamwar.bausystem.world.ArenaSection; +import de.steamwar.bausystem.world.Region; import de.steamwar.bausystem.world.Welt; +import de.steamwar.sql.Schematic; +import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import java.util.logging.Level; + public class CommandProtect implements CommandExecutor { @Override @@ -41,10 +45,23 @@ public class CommandProtect implements CommandExecutor { return false; } - for(ArenaSection section : BauSystem.getSections()){ - if(section.inRegion(player.getLocation()) && section.hasProtection()){ - section.protect(); - player.sendMessage(BauSystem.PREFIX + "§7Boden geschützt"); + for(Region region : Region.getRegions()){ + if(region.inRegion(player.getLocation()) && region.hasProtection()){ + try { + Schematic schem = null; + if(args.length > 0){ + schem = Schematic.getSchemFromDB(args[0], player.getUniqueId()); + if(schem == null){ + player.sendMessage(BauSystem.PREFIX + "§cSchematic nicht gefunden"); + return false; + } + } + region.protect(player, schem); + player.sendMessage(BauSystem.PREFIX + "§7Boden geschützt"); + }catch(Exception e){ + player.sendMessage(BauSystem.PREFIX + "§cFehler beim Schützen der Region"); + Bukkit.getLogger().log(Level.WARNING, "Failed protect", e); + } return false; } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandReset.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandReset.java index 9967c14..f68d3f6 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandReset.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandReset.java @@ -21,7 +21,7 @@ package de.steamwar.bausystem.commands; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.Permission; -import de.steamwar.bausystem.world.ArenaSection; +import de.steamwar.bausystem.world.Region; import de.steamwar.bausystem.world.Welt; import de.steamwar.sql.Schematic; import org.bukkit.Bukkit; @@ -45,8 +45,8 @@ public class CommandReset implements CommandExecutor { return false; } - for(ArenaSection section : BauSystem.getSections()){ - if(section.inRegion(player.getLocation())){ + for(Region region : Region.getRegions()){ + if(region.inRegion(player.getLocation()) && region.hasProtection()){ try { if(args.length > 0){ Schematic schem = Schematic.getSchemFromDB(args[0], player.getUniqueId()); @@ -54,9 +54,9 @@ public class CommandReset implements CommandExecutor { player.sendMessage(BauSystem.PREFIX + "§cSchematic nicht gefunden"); return false; } - section.reset(schem); + region.reset(player, schem); }else{ - section.fastreset(); + region.fastreset(player); } player.sendMessage(BauSystem.PREFIX + "§7Region zurückgesetzt"); }catch(Exception e){ diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandTestblock.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandTestblock.java index cffac99..d7f060b 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandTestblock.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandTestblock.java @@ -21,16 +21,16 @@ package de.steamwar.bausystem.commands; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.Permission; -import de.steamwar.bausystem.world.ArenaSection; +import de.steamwar.bausystem.world.Region; import de.steamwar.bausystem.world.Welt; -import de.steamwar.sql.NoClipboardException; import de.steamwar.sql.Schematic; +import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.io.IOException; +import java.util.logging.Level; public class CommandTestblock implements CommandExecutor { @@ -45,24 +45,23 @@ public class CommandTestblock implements CommandExecutor { return false; } - for(ArenaSection section : BauSystem.getSections()){ - if(section.inRegion(player.getLocation())){ - if(args.length > 0){ - Schematic schem = Schematic.getSchemFromDB(args[0], player.getUniqueId()); - if(schem == null){ - player.sendMessage(BauSystem.PREFIX + "§cSchematic nicht gefunden"); - return false; + for(Region region : Region.getRegions()){ + if(region.inRegion(player.getLocation()) && region.hasProtection()){ + try { + Schematic schem = null; + if(args.length > 0){ + schem = Schematic.getSchemFromDB(args[0], player.getUniqueId()); + if(schem == null){ + player.sendMessage(BauSystem.PREFIX + "§cSchematic nicht gefunden"); + return false; + } } - try { - section.getTestblock().reset(schem); - } catch (IOException | NoClipboardException e) { - player.sendMessage(BauSystem.PREFIX + "§cFehler beim Laden der Schematic"); - throw new SecurityException("Failed to load Testblock Schematic", e); - } - }else{ - section.getTestblock().reset(); + region.resetTestblock(player, schem); + player.sendMessage(BauSystem.PREFIX + "§7Testblock zurückgesetzt"); + }catch(Exception e){ + player.sendMessage(BauSystem.PREFIX + "§cFehler beim Zurücksetzen des Testblocks"); + Bukkit.getLogger().log(Level.WARNING, "Failed testblock", e); } - player.sendMessage(BauSystem.PREFIX + "§7Testblock zurückgesetzt"); return false; } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/ArenaSection.java b/BauSystem_Main/src/de/steamwar/bausystem/world/ArenaSection.java deleted file mode 100644 index f1bdc3d..0000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/ArenaSection.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2020 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -package de.steamwar.bausystem.world; - -import de.steamwar.bausystem.BauSystem; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -public class ArenaSection extends Region { - - private final Region testblock; - private final String protectSchematic; - - private ArenaSection(ConfigurationSection config) { - super(config); - testblock = new Region(Objects.requireNonNull(config.getConfigurationSection("testblock"))); - protectSchematic = config.getString("protection"); - } - - public Region getTestblock(){ - return testblock; - } - - public static List loadFromFile(File file) throws IOException, InvalidConfigurationException { - YamlConfiguration config = new YamlConfiguration(); - config.load(file); - List list = new ArrayList<>(); - for(String section : config.getKeys(false)) - list.add(new ArenaSection(config.getConfigurationSection(section))); - return list; - } - - public boolean hasProtection(){ - return !protectSchematic.equals(""); - } - - public void protect(){ - File file = new File(BauSystem.SECTION_PATH + protectSchematic); - paste(file, minX + sizeX/2, testblock.minY-1, minZ + sizeZ/2, rotate); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/Region.java b/BauSystem_Main/src/de/steamwar/bausystem/world/Region.java index 76af805..08e2b86 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/Region.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/Region.java @@ -20,88 +20,196 @@ package de.steamwar.bausystem.world; import com.sk89q.worldedit.extent.clipboard.Clipboard; -import de.steamwar.bausystem.BauSystem; import de.steamwar.core.Core; import de.steamwar.sql.NoClipboardException; import de.steamwar.sql.Schematic; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; import java.io.File; import java.io.IOException; +import java.util.*; +import java.util.logging.Level; public class Region { - final int sizeX; - private final int sizeY; - final int sizeZ; - final int minX; - final int minY; - final int minZ; + private static final List regions = new ArrayList<>(); - private final String schematic; - final boolean rotate; + static{ + YamlConfiguration config = new YamlConfiguration(); + try { + config.load(new File(Bukkit.getWorlds().get(0).getWorldFolder(), "sections.yml")); + } catch (InvalidConfigurationException | IOException e) { + Bukkit.getLogger().log(Level.SEVERE, "Failed to load sections.yml", e); + } - Region(ConfigurationSection config){ - sizeX = config.getInt("sizeX"); - sizeY = config.getInt("sizeY"); - sizeZ = config.getInt("sizeZ"); + ConfigurationSection prototypes = config.getConfigurationSection("prototypes"); + assert prototypes != null; + for(String prototype : prototypes.getKeys(false)){ + new Prototype(Objects.requireNonNull(prototypes.getConfigurationSection(prototype))); + } + + ConfigurationSection regions = config.getConfigurationSection("regions"); + assert regions != null; + for(String region : regions.getKeys(false)){ + new Region(Objects.requireNonNull(prototypes.getConfigurationSection(region))); + } + } + + public static List getRegions(){ + return regions; + } + + private final int minX; + private final int minY; + private final int minZ; + private final Prototype prototype; + + private Region(ConfigurationSection config){ minX = config.getInt("minX"); minY = config.getInt("minY"); minZ = config.getInt("minZ"); - schematic = config.getString("schematic"); - rotate = config.getBoolean("rotate"); + prototype = Prototype.prototypes.get(config.getString("prototype")); + regions.add(this); } public boolean inRegion(Location l){ - return inRange(l.getX(), minX, sizeX) && inRange(l.getY(), minY, sizeY) && inRange(l.getZ(), minZ, sizeZ); + return prototype.inRegion(this, l); } - private boolean inRange(double l, int min, int size){ - return min <= l && l <= min + size; + public void fastreset(Player player){ + prototype.fastreset(player, this); } - public void fastreset(){ - File file = new File(BauSystem.SECTION_PATH + schematic); - fastpaste(file, minX + sizeX/2, minY, minZ + sizeZ/2, rotate); + public void reset(Player player, Schematic schem) throws IOException, NoClipboardException { + prototype.reset(player, this, schem); } - public void reset(){ - File file = new File(BauSystem.SECTION_PATH + schematic); - paste(file, minX + sizeX/2, minY, minZ + sizeZ/2, rotate); + public void resetTestblock(Player player, Schematic schem) throws IOException, NoClipboardException{ + prototype.resetTestblock(player, this, schem); } - public void reset(Schematic schem) throws IOException, NoClipboardException { - paste(schem.load(), minX + sizeX/2, minY, minZ + sizeZ/2, rotate); + public boolean hasProtection(){ + return prototype.hasProtection(); } - static void paste(File file, int x, int y, int z, boolean rotate){ - switch(Core.getVersion()){ - case 15: - Region_15.paste(file, x, y, z, rotate); - break; - default: - Region_12.paste(file, x, y, z, rotate); + public void protect(Player player, Schematic schem) throws IOException, NoClipboardException { + prototype.protect(player, this, schem); + } + + public static class Prototype{ + private static final String SECTION_PATH = "/home/minecraft/backbone/server/UserBau/"; + private static final Map prototypes = new HashMap<>(); + + private final int sizeX; + private final int sizeY; + private final int sizeZ; + + private final int offsetX; + private final int offsetY; + private final int offsetZ; + + private final String schematic; + private final boolean rotate; + + private final Prototype testblock; //nullable + private final String protectSchematic; //nullable + + private Prototype(ConfigurationSection config){ + sizeX = config.getInt("sizeX"); + sizeY = config.getInt("sizeY"); + sizeZ = config.getInt("sizeZ"); + schematic = config.getString("schematic"); + offsetX = config.getInt("offsetX", 0); + offsetY = config.getInt("offsetY", 0); + offsetZ = config.getInt("offsetZ", 0); + rotate = config.getBoolean("rotate", false); + + ConfigurationSection testblockSection = config.getConfigurationSection("testblock"); + testblock = testblockSection != null ? new Prototype(testblockSection) : null; + protectSchematic = config.getString("protection", null); + + if(!config.getName().equals("testblock")) + prototypes.put(config.getName(), this); } - } - private static void fastpaste(File file, int x, int y, int z, boolean rotate){ - switch(Core.getVersion()){ - case 15: - Region_15.fastpaste(file, x, y, z, rotate); - break; - default: - Region_12.paste(file, x, y, z, rotate); + public boolean inRegion(Region region, Location l){ + return inRange(l.getX(), region.minX + offsetX, sizeX + offsetX) && + inRange(l.getY(), region.minY + offsetY, sizeY + offsetY) && + inRange(l.getZ(), region.minZ + offsetZ, sizeZ + offsetZ); } - } - private static void paste(Clipboard clipboard, int x, int y, int z, boolean rotate){ - switch(Core.getVersion()){ - case 15: - Region_15.paste(clipboard, x, y, z, rotate); - break; - default: - Region_12.paste(clipboard, x, y, z, rotate); + public void fastreset(Player player, Region region){ + File file = new File(SECTION_PATH + schematic); + int x = region.minX + offsetX + sizeX/2; + int y = region.minY + offsetY; + int z = region.minZ + offsetZ + sizeZ/2; + switch(Core.getVersion()){ + case 12: + Region_12.paste(player, file, x, y, z, rotate); + break; + case 15: + default: + Region_15.fastpaste(file, x, y, z, rotate); + } + } + + public void reset(Player player, Region region, Schematic schem) throws IOException, NoClipboardException { + int x = region.minX + offsetX + sizeX / 2; + int y = region.minY + offsetY; + int z = region.minZ + offsetZ + sizeZ / 2; + if(schem == null) + paste(player, new File(SECTION_PATH + schematic), x, y, z, rotate); + else + paste(player, schem.load(), x, y, z, rotate); + } + + public boolean hasProtection(){ + return protectSchematic != null; + } + + public void protect(Player player, Region region, Schematic schem) throws IOException, NoClipboardException { + int x = region.minX + offsetX + sizeX / 2; + int y = region.minY + testblock.offsetY - 1; + int z = region.minZ + offsetZ + sizeZ / 2; + if(schem == null) + paste(player, new File(SECTION_PATH + protectSchematic), x, y, z, rotate); + else + paste(player, schem.load(), x, y, z, rotate); + } + + public void resetTestblock(Player player, Region region, Schematic schem) throws IOException, NoClipboardException { + testblock.reset(player, region, schem); + } + + private static boolean inRange(double l, int min, int size){ + return min <= l && l <= min + size; + } + + private static void paste(Player player, File file, int x, int y, int z, boolean rotate){ //Type of protect + switch(Core.getVersion()){ + case 12: + Region_12.paste(player, file, x, y, z, rotate); + break; + case 15: + default: + Region_15.paste(player, file, x, y, z, rotate); + } + } + + private static void paste(Player player, Clipboard clipboard, int x, int y, int z, boolean rotate){ + switch(Core.getVersion()){ + case 12: + Region_12.paste(player, clipboard, x, y, z, rotate); + break; + case 15: + default: + Region_15.paste(player, clipboard, x, y, z, rotate); + } } } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/RegionListener.java b/BauSystem_Main/src/de/steamwar/bausystem/world/RegionListener.java index f2239dc..7bfdedf 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/RegionListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/RegionListener.java @@ -23,23 +23,15 @@ package de.steamwar.bausystem.world; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.Permission; import de.steamwar.core.Core; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.BookMeta; - -import java.util.logging.Level; public class RegionListener implements Listener { @@ -53,13 +45,7 @@ public class RegionListener implements Listener { if (Welt.noPermission(p, Permission.worldedit)){ p.sendMessage(BauSystem.PREFIX + "§cDu darfst hier kein WorldEdit benutzen"); e.setCancelled(true); - return; } - - /*if(!CommandFreeze.getInstance().isOn() && !Bukkit.getPluginManager().isPluginEnabled("FastAsyncWorldEdit")){ - CommandFreeze.getInstance().toggle(); - Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), CommandFreeze.getInstance()::toggle, 3); - }*/ } @EventHandler(priority = EventPriority.LOWEST) @@ -86,15 +72,6 @@ public class RegionListener implements Listener { } } - private boolean isWorldEditCommand(String command) { - switch(Core.getVersion()){ - case 15: - return RegionListener_15.isWorldEditCommand(command); - default: - return RegionListener_12.isWorldEditCommand(command); - } - } - @EventHandler public void onSignChange(SignChangeEvent event) { for(int i = 0; i <= 3; ++i) { @@ -106,4 +83,12 @@ public class RegionListener implements Listener { } } + private static boolean isWorldEditCommand(String command) { + switch(Core.getVersion()){ + case 15: + return RegionListener_15.isWorldEditCommand(command); + default: + return RegionListener_12.isWorldEditCommand(command); + } + } } From 9126e6b3034f4f9fd5328451bb2ee0bcb31cb4de Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sat, 12 Dec 2020 17:13:43 +0100 Subject: [PATCH 2/3] Removing changes from player history --- .../steamwar/bausystem/world/Region_12.java | 9 ++-- .../steamwar/bausystem/world/Region_15.java | 9 ++-- .../bausystem/commands/CommandProtect.java | 2 +- .../bausystem/commands/CommandReset.java | 4 +- .../bausystem/commands/CommandTestblock.java | 2 +- .../de/steamwar/bausystem/world/Region.java | 49 +++++++++---------- 6 files changed, 34 insertions(+), 41 deletions(-) diff --git a/BauSystem_12/src/de/steamwar/bausystem/world/Region_12.java b/BauSystem_12/src/de/steamwar/bausystem/world/Region_12.java index 0330428..bfd38c6 100644 --- a/BauSystem_12/src/de/steamwar/bausystem/world/Region_12.java +++ b/BauSystem_12/src/de/steamwar/bausystem/world/Region_12.java @@ -23,7 +23,6 @@ import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.BukkitWorld; -import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; import com.sk89q.worldedit.function.operation.Operations; @@ -31,7 +30,6 @@ import com.sk89q.worldedit.math.transform.AffineTransform; import com.sk89q.worldedit.session.ClipboardHolder; import com.sk89q.worldedit.world.World; import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import java.io.File; import java.io.FileInputStream; @@ -41,7 +39,7 @@ import java.util.Objects; class Region_12 { private Region_12(){} - static void paste(Player player, File file, int x, int y, int z, boolean rotate){ + static void paste(File file, int x, int y, int z, boolean rotate){ World w = new BukkitWorld(Bukkit.getWorlds().get(0)); Clipboard clipboard; try { @@ -50,10 +48,10 @@ class Region_12 { throw new SecurityException("Bausystem schematic not found", e); } - paste(player, clipboard, x, y, z, rotate); + paste(clipboard, x, y, z, rotate); } - static void paste(Player player, Clipboard clipboard, int x, int y, int z, boolean rotate){ + static void paste(Clipboard clipboard, int x, int y, int z, boolean rotate){ World w = new BukkitWorld(Bukkit.getWorlds().get(0)); Vector dimensions = clipboard.getDimensions(); @@ -72,6 +70,5 @@ class Region_12 { ch.setTransform(aT); Operations.completeBlindly(ch.createPaste(e, w.getWorldData()).to(v).build()); e.flushQueue(); - ((WorldEditPlugin) Bukkit.getServer().getPluginManager() .getPlugin("WorldEdit")).getSession(player).remember(e); } } diff --git a/BauSystem_15/src/de/steamwar/bausystem/world/Region_15.java b/BauSystem_15/src/de/steamwar/bausystem/world/Region_15.java index 6839f0e..cbec486 100644 --- a/BauSystem_15/src/de/steamwar/bausystem/world/Region_15.java +++ b/BauSystem_15/src/de/steamwar/bausystem/world/Region_15.java @@ -23,7 +23,6 @@ import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitWorld; -import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats; import com.sk89q.worldedit.function.operation.Operations; @@ -38,7 +37,6 @@ import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.bukkit.craftbukkit.v1_15_R1.CraftWorld; import org.bukkit.craftbukkit.v1_15_R1.block.data.CraftBlockData; -import org.bukkit.entity.Player; import java.io.File; import java.io.FileInputStream; @@ -48,7 +46,7 @@ import java.util.Objects; class Region_15 { private Region_15(){} - static void paste(Player player, File file, int x, int y, int z, boolean rotate){ + static void paste(File file, int x, int y, int z, boolean rotate){ Clipboard clipboard; try { clipboard = Objects.requireNonNull(ClipboardFormats.findByFile(file)).getReader(new FileInputStream(file)).read(); @@ -56,10 +54,10 @@ class Region_15 { throw new SecurityException("Bausystem schematic not found", e); } - paste(player, clipboard, x, y, z, rotate); + paste(clipboard, x, y, z, rotate); } - static void paste(Player player, Clipboard clipboard, int x, int y, int z, boolean rotate){ + static void paste(Clipboard clipboard, int x, int y, int z, boolean rotate){ BlockVector3 dimensions = clipboard.getDimensions(); BlockVector3 v = BlockVector3.at(x, y, z); BlockVector3 offset = clipboard.getRegion().getMinimumPoint().subtract(clipboard.getOrigin()); @@ -76,7 +74,6 @@ class Region_15 { ch.setTransform(aT); Operations.completeBlindly(ch.createPaste(e).to(v).build()); e.flushSession(); - ((WorldEditPlugin) Objects.requireNonNull(Bukkit.getServer().getPluginManager().getPlugin("WorldEdit"))).getSession(player).remember(e); } static void fastpaste(File file, int x, int y, int z, boolean rotate){ diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandProtect.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandProtect.java index 8e0bb6b..f12afb7 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandProtect.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandProtect.java @@ -56,7 +56,7 @@ public class CommandProtect implements CommandExecutor { return false; } } - region.protect(player, schem); + region.protect(schem); player.sendMessage(BauSystem.PREFIX + "§7Boden geschützt"); }catch(Exception e){ player.sendMessage(BauSystem.PREFIX + "§cFehler beim Schützen der Region"); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandReset.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandReset.java index f68d3f6..3844887 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandReset.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandReset.java @@ -54,9 +54,9 @@ public class CommandReset implements CommandExecutor { player.sendMessage(BauSystem.PREFIX + "§cSchematic nicht gefunden"); return false; } - region.reset(player, schem); + region.reset(schem); }else{ - region.fastreset(player); + region.fastreset(); } player.sendMessage(BauSystem.PREFIX + "§7Region zurückgesetzt"); }catch(Exception e){ diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandTestblock.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandTestblock.java index d7f060b..9d0bc15 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandTestblock.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandTestblock.java @@ -56,7 +56,7 @@ public class CommandTestblock implements CommandExecutor { return false; } } - region.resetTestblock(player, schem); + region.resetTestblock(schem); player.sendMessage(BauSystem.PREFIX + "§7Testblock zurückgesetzt"); }catch(Exception e){ player.sendMessage(BauSystem.PREFIX + "§cFehler beim Zurücksetzen des Testblocks"); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/Region.java b/BauSystem_Main/src/de/steamwar/bausystem/world/Region.java index 08e2b86..034745b 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/Region.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/Region.java @@ -28,7 +28,6 @@ import org.bukkit.Location; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; import java.io.File; import java.io.IOException; @@ -81,24 +80,24 @@ public class Region { return prototype.inRegion(this, l); } - public void fastreset(Player player){ - prototype.fastreset(player, this); + public void fastreset(){ + prototype.fastreset(this); } - public void reset(Player player, Schematic schem) throws IOException, NoClipboardException { - prototype.reset(player, this, schem); + public void reset(Schematic schem) throws IOException, NoClipboardException { + prototype.reset(this, schem); } - public void resetTestblock(Player player, Schematic schem) throws IOException, NoClipboardException{ - prototype.resetTestblock(player, this, schem); + public void resetTestblock(Schematic schem) throws IOException, NoClipboardException{ + prototype.resetTestblock(this, schem); } public boolean hasProtection(){ return prototype.hasProtection(); } - public void protect(Player player, Schematic schem) throws IOException, NoClipboardException { - prototype.protect(player, this, schem); + public void protect(Schematic schem) throws IOException, NoClipboardException { + prototype.protect(this, schem); } public static class Prototype{ @@ -143,14 +142,14 @@ public class Region { inRange(l.getZ(), region.minZ + offsetZ, sizeZ + offsetZ); } - public void fastreset(Player player, Region region){ + public void fastreset(Region region){ File file = new File(SECTION_PATH + schematic); int x = region.minX + offsetX + sizeX/2; int y = region.minY + offsetY; int z = region.minZ + offsetZ + sizeZ/2; switch(Core.getVersion()){ case 12: - Region_12.paste(player, file, x, y, z, rotate); + Region_12.paste(file, x, y, z, rotate); break; case 15: default: @@ -158,57 +157,57 @@ public class Region { } } - public void reset(Player player, Region region, Schematic schem) throws IOException, NoClipboardException { + public void reset(Region region, Schematic schem) throws IOException, NoClipboardException { int x = region.minX + offsetX + sizeX / 2; int y = region.minY + offsetY; int z = region.minZ + offsetZ + sizeZ / 2; if(schem == null) - paste(player, new File(SECTION_PATH + schematic), x, y, z, rotate); + paste(new File(SECTION_PATH + schematic), x, y, z, rotate); else - paste(player, schem.load(), x, y, z, rotate); + paste(schem.load(), x, y, z, rotate); } public boolean hasProtection(){ return protectSchematic != null; } - public void protect(Player player, Region region, Schematic schem) throws IOException, NoClipboardException { + public void protect(Region region, Schematic schem) throws IOException, NoClipboardException { int x = region.minX + offsetX + sizeX / 2; int y = region.minY + testblock.offsetY - 1; int z = region.minZ + offsetZ + sizeZ / 2; if(schem == null) - paste(player, new File(SECTION_PATH + protectSchematic), x, y, z, rotate); + paste(new File(SECTION_PATH + protectSchematic), x, y, z, rotate); else - paste(player, schem.load(), x, y, z, rotate); + paste(schem.load(), x, y, z, rotate); } - public void resetTestblock(Player player, Region region, Schematic schem) throws IOException, NoClipboardException { - testblock.reset(player, region, schem); + public void resetTestblock(Region region, Schematic schem) throws IOException, NoClipboardException { + testblock.reset(region, schem); } private static boolean inRange(double l, int min, int size){ return min <= l && l <= min + size; } - private static void paste(Player player, File file, int x, int y, int z, boolean rotate){ //Type of protect + private static void paste(File file, int x, int y, int z, boolean rotate){ //Type of protect switch(Core.getVersion()){ case 12: - Region_12.paste(player, file, x, y, z, rotate); + Region_12.paste(file, x, y, z, rotate); break; case 15: default: - Region_15.paste(player, file, x, y, z, rotate); + Region_15.paste(file, x, y, z, rotate); } } - private static void paste(Player player, Clipboard clipboard, int x, int y, int z, boolean rotate){ + private static void paste(Clipboard clipboard, int x, int y, int z, boolean rotate){ switch(Core.getVersion()){ case 12: - Region_12.paste(player, clipboard, x, y, z, rotate); + Region_12.paste(clipboard, x, y, z, rotate); break; case 15: default: - Region_15.paste(player, clipboard, x, y, z, rotate); + Region_15.paste(clipboard, x, y, z, rotate); } } } From 6fe246b23045707647c04d3d022a9528cdc6aec1 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Wed, 6 Jan 2021 13:48:36 +0100 Subject: [PATCH 3/3] Fix Regions --- BauSystem_Main/src/de/steamwar/bausystem/world/Region.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/Region.java b/BauSystem_Main/src/de/steamwar/bausystem/world/Region.java index 034745b..5bc4449 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/Region.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/Region.java @@ -55,7 +55,7 @@ public class Region { ConfigurationSection regions = config.getConfigurationSection("regions"); assert regions != null; for(String region : regions.getKeys(false)){ - new Region(Objects.requireNonNull(prototypes.getConfigurationSection(region))); + new Region(Objects.requireNonNull(regions.getConfigurationSection(region))); } }