diff --git a/SpigotCore/SpigotCore_20/src/de/steamwar/core/WorldEditRendererWrapper20.java b/SpigotCore/SpigotCore_20/src/de/steamwar/core/WorldEditRendererWrapper20.java index 58d8c4e9..36ded8ef 100644 --- a/SpigotCore/SpigotCore_20/src/de/steamwar/core/WorldEditRendererWrapper20.java +++ b/SpigotCore/SpigotCore_20/src/de/steamwar/core/WorldEditRendererWrapper20.java @@ -26,7 +26,6 @@ import org.bukkit.block.data.BlockData; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -63,31 +62,26 @@ public class WorldEditRendererWrapper20 implements WorldEditRendererWrapper { } private static final Map servers = new HashMap<>(); - private static final Map> boxes = new HashMap<>(); + private static final Map boxes = new HashMap<>(); @Override - public void draw(Player player, Player owner, boolean clipboard, Vector pos1, Vector pos2) { + public void draw(Player player, boolean scheduled, boolean clipboard, Vector pos1, Vector pos2) { REntityServer server = servers.computeIfAbsent(player, __ -> { REntityServer entityServer = new REntityServer(); entityServer.addPlayer(player); return entityServer; }); - WorldEditRendererCUIEditor.Type type; - if (player == owner) { - type = clipboard ? WorldEditRendererCUIEditor.Type.CLIPBOARD : WorldEditRendererCUIEditor.Type.SELECTION; - } else { - type = clipboard ? WorldEditRendererCUIEditor.Type.CLIPBOARD_OTHER : WorldEditRendererCUIEditor.Type.SELECTION_OTHER; - } + WorldEditRendererCUIEditor.Type type = clipboard ? WorldEditRendererCUIEditor.Type.CLIPBOARD : WorldEditRendererCUIEditor.Type.SELECTION; float width = type.getWidth(player).value; Material material = type.getMaterial(player); if (material == Material.BARRIER) { - hide(player, owner, clipboard, true); + hide(player, clipboard, true); return; } BlockData block = material.createBlockData(); - BoxPair boxPair = boxes.computeIfAbsent(player, __ -> new HashMap<>()).computeIfAbsent(owner, __ -> new BoxPair()); + BoxPair boxPair = boxes.computeIfAbsent(player, __ -> new BoxPair()); CWireframe box = boxPair.get(clipboard); if (box == null) { box = new CWireframe(server); @@ -107,35 +101,18 @@ public class WorldEditRendererWrapper20 implements WorldEditRendererWrapper { } @Override - public void hide(Player player, Player owner, boolean clipboard, boolean hide) { - Map pairs = boxes.getOrDefault(player, Collections.emptyMap()); - if (owner != null) { - BoxPair boxPair = pairs.get(owner); - if (boxPair == null) return; - CWireframe box = boxPair.get(clipboard); - if (box != null) box.hide(hide); - } else { - pairs.values().forEach(boxPair -> { - CWireframe box = boxPair.get(clipboard); - if (box != null) box.hide(hide); - }); - } + public void hide(Player player, boolean clipboard, boolean hide) { + BoxPair boxPair = boxes.get(player); + if (boxPair == null) return; + CWireframe box = boxPair.get(clipboard); + if (box == null) return; + box.hide(hide); } @Override public void remove(Player player) { - Map removed = boxes.remove(player); - if (removed != null) { - removed.values().forEach(boxPair -> { - boxPair.die(); - }); - } - boxes.values().forEach(map -> { - BoxPair boxPair = map.remove(player); - if (boxPair == null) return; - boxPair.die(); - }); - + BoxPair boxPair = boxes.remove(player); + if (boxPair != null) boxPair.die(); REntityServer server = servers.remove(player); if (server != null) server.close(); } diff --git a/SpigotCore/SpigotCore_8/src/de/steamwar/core/WorldEditRendererWrapper8.java b/SpigotCore/SpigotCore_8/src/de/steamwar/core/WorldEditRendererWrapper8.java index 3a9042ed..68f64c46 100644 --- a/SpigotCore/SpigotCore_8/src/de/steamwar/core/WorldEditRendererWrapper8.java +++ b/SpigotCore/SpigotCore_8/src/de/steamwar/core/WorldEditRendererWrapper8.java @@ -25,7 +25,7 @@ import org.bukkit.util.Vector; public class WorldEditRendererWrapper8 implements WorldEditRendererWrapper { @Override - public void draw(Player player, Player owner, boolean clipboard, Vector pos1, Vector pos2) { + public void draw(Player player, boolean scheduled, boolean clipboard, Vector pos1, Vector pos2) { } @Override @@ -33,7 +33,7 @@ public class WorldEditRendererWrapper8 implements WorldEditRendererWrapper { } @Override - public void hide(Player player, Player owner, boolean clipboard, boolean hide) { + public void hide(Player player, boolean clipboard, boolean hide) { } @Override diff --git a/SpigotCore/SpigotCore_9/src/de/steamwar/core/WorldEditRendererWrapper9.java b/SpigotCore/SpigotCore_9/src/de/steamwar/core/WorldEditRendererWrapper9.java index 579b5f14..5da6104a 100644 --- a/SpigotCore/SpigotCore_9/src/de/steamwar/core/WorldEditRendererWrapper9.java +++ b/SpigotCore/SpigotCore_9/src/de/steamwar/core/WorldEditRendererWrapper9.java @@ -34,34 +34,32 @@ public class WorldEditRendererWrapper9 implements WorldEditRendererWrapper { private static final Vector STEPS = new Vector(STEP_SIZE, STEP_SIZE, STEP_SIZE); @Override - public void draw(Player player, Player owner, boolean clipboard, Vector min, Vector max) { + public void draw(Player player, boolean scheduled, boolean clipboard, Vector min, Vector max) { + if (!scheduled) return; + max = max.clone().add(ONES); - drawLine(player, owner, clipboard, new Vector(min.getX(), min.getY(), min.getZ()), new Vector(max.getX(), min.getY(), min.getZ())); - drawLine(player, owner, clipboard, new Vector(min.getX(), max.getY(), min.getZ()), new Vector(max.getX(), max.getY(), min.getZ())); - drawLine(player, owner, clipboard, new Vector(min.getX(), min.getY(), max.getZ()), new Vector(max.getX(), min.getY(), max.getZ())); - drawLine(player, owner, clipboard, new Vector(min.getX(), max.getY(), max.getZ()), new Vector(max.getX(), max.getY(), max.getZ())); + drawLine(player, clipboard, new Vector(min.getX(), min.getY(), min.getZ()), new Vector(max.getX(), min.getY(), min.getZ())); + drawLine(player, clipboard, new Vector(min.getX(), max.getY(), min.getZ()), new Vector(max.getX(), max.getY(), min.getZ())); + drawLine(player, clipboard, new Vector(min.getX(), min.getY(), max.getZ()), new Vector(max.getX(), min.getY(), max.getZ())); + drawLine(player, clipboard, new Vector(min.getX(), max.getY(), max.getZ()), new Vector(max.getX(), max.getY(), max.getZ())); - drawLine(player, owner, clipboard, new Vector(min.getX(), min.getY(), min.getZ()), new Vector(min.getX(), max.getY(), min.getZ())); - drawLine(player, owner, clipboard, new Vector(max.getX(), min.getY(), min.getZ()), new Vector(max.getX(), max.getY(), min.getZ())); - drawLine(player, owner, clipboard, new Vector(min.getX(), min.getY(), max.getZ()), new Vector(min.getX(), max.getY(), max.getZ())); - drawLine(player, owner, clipboard, new Vector(max.getX(), min.getY(), max.getZ()), new Vector(max.getX(), max.getY(), max.getZ())); + drawLine(player, clipboard, new Vector(min.getX(), min.getY(), min.getZ()), new Vector(min.getX(), max.getY(), min.getZ())); + drawLine(player, clipboard, new Vector(max.getX(), min.getY(), min.getZ()), new Vector(max.getX(), max.getY(), min.getZ())); + drawLine(player, clipboard, new Vector(min.getX(), min.getY(), max.getZ()), new Vector(min.getX(), max.getY(), max.getZ())); + drawLine(player, clipboard, new Vector(max.getX(), min.getY(), max.getZ()), new Vector(max.getX(), max.getY(), max.getZ())); - drawLine(player, owner, clipboard, new Vector(min.getX(), min.getY(), min.getZ()), new Vector(min.getX(), min.getY(), max.getZ())); - drawLine(player, owner, clipboard, new Vector(max.getX(), min.getY(), min.getZ()), new Vector(max.getX(), min.getY(), max.getZ())); - drawLine(player, owner, clipboard, new Vector(min.getX(), max.getY(), min.getZ()), new Vector(min.getX(), max.getY(), max.getZ())); - drawLine(player, owner, clipboard, new Vector(max.getX(), max.getY(), min.getZ()), new Vector(max.getX(), max.getY(), max.getZ())); + drawLine(player, clipboard, new Vector(min.getX(), min.getY(), min.getZ()), new Vector(min.getX(), min.getY(), max.getZ())); + drawLine(player, clipboard, new Vector(max.getX(), min.getY(), min.getZ()), new Vector(max.getX(), min.getY(), max.getZ())); + drawLine(player, clipboard, new Vector(min.getX(), max.getY(), min.getZ()), new Vector(min.getX(), max.getY(), max.getZ())); + drawLine(player, clipboard, new Vector(max.getX(), max.getY(), min.getZ()), new Vector(max.getX(), max.getY(), max.getZ())); } - private void drawLine(Player player, Player owner, boolean clipboard, Vector min, Vector max) { + private void drawLine(Player player, boolean clipboard, Vector min, Vector max) { Particle particle; - if (player == owner) { - if (clipboard) { - particle = TrickyParticleWrapper.impl.getVillagerHappy(); - } else { - particle = Particle.DRAGON_BREATH; - } + if (clipboard) { + particle = TrickyParticleWrapper.impl.getVillagerHappy(); } else { - particle = Particle.TOWN_AURA; + particle = Particle.DRAGON_BREATH; } Vector stepSize = max.clone().subtract(min).normalize().multiply(STEPS); @@ -85,7 +83,7 @@ public class WorldEditRendererWrapper9 implements WorldEditRendererWrapper { } @Override - public void hide(Player player, Player owner, boolean clipboard, boolean hide) { + public void hide(Player player, boolean clipboard, boolean hide) { } @Override diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRenderer.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRenderer.java index 0a6c128c..5e359512 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRenderer.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRenderer.java @@ -47,22 +47,20 @@ public class WorldEditRenderer implements Listener { we = WorldEditWrapper.getWorldEditPlugin(); Bukkit.getPluginManager().registerEvents(this, Core.getInstance()); - Bukkit.getScheduler().runTaskTimer(Core.getInstance(), this::render, 20, 20); + Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> { + for (Player player : Bukkit.getOnlinePlayers()) { + renderPlayer(player, true); + } + }, 20, 20); } - private void render() { - for(Player player : Bukkit.getOnlinePlayers()) { - renderPlayer(player); - } - } - - private void renderPlayer(Player player) { + private void renderPlayer(Player player, boolean scheduled) { LocalSession session = we.getSession(player); - renderClipboard(player, session); - renderRegion(player, session); + renderClipboard(player, session, scheduled); + renderRegion(player, session, scheduled); } - private void renderClipboard(Player player, LocalSession session) { + private void renderClipboard(Player player, LocalSession session, boolean scheduled) { try { Clipboard clipboard = session.getClipboard().getClipboard(); Vector pos = player.getLocation().toVector(); @@ -72,36 +70,34 @@ public class WorldEditRenderer implements Listener { Vector b = WorldEditWrapper.impl.applyTransform(WorldEditWrapper.impl.getMaximum(region).subtract(WorldEditWrapper.impl.getOrigin(clipboard)), transform).add(pos); a = new Vector(a.getBlockX(), a.getBlockY(), a.getBlockZ()); b = new Vector(b.getBlockX(), b.getBlockY(), b.getBlockZ()); - drawCuboid(Vector.getMinimum(a, b), Vector.getMaximum(a, b), true, player); + drawCuboid(Vector.getMinimum(a, b), Vector.getMaximum(a, b), scheduled, true, player); } catch (EmptyClipboardException e) { - WorldEditRendererWrapper.impl.hide(player, player, true, true); + WorldEditRendererWrapper.impl.hide(player, true, true); } } - private void renderRegion(Player player, LocalSession session) { + private void renderRegion(Player player, LocalSession session, boolean scheduled) { World world = session.getSelectionWorld(); if(world != null) { RegionSelector regionSelector = session.getRegionSelector(world); try { Region region = regionSelector.getRegion(); - drawCuboid(WorldEditWrapper.impl.getMinimum(region), WorldEditWrapper.impl.getMaximum(region), false, player); + drawCuboid(WorldEditWrapper.impl.getMinimum(region), WorldEditWrapper.impl.getMaximum(region), scheduled, false, player); } catch (IncompleteRegionException e) { - WorldEditRendererWrapper.impl.hide(player, player, false, true); + WorldEditRendererWrapper.impl.hide(player, false, true); } } } - private void drawCuboid(Vector min, Vector max, boolean clipboard, Player owner) { - for (Player player : Bukkit.getOnlinePlayers()) { - //noinspection deprecation - if(player.getItemInHand().getType() != WAND) { - WorldEditRendererWrapper.impl.hide(player, owner, true, true); - WorldEditRendererWrapper.impl.hide(player, owner, false, true); - } else { - WorldEditRendererWrapper.impl.hide(player, owner, true, false); - WorldEditRendererWrapper.impl.hide(player, owner, false, false); - WorldEditRendererWrapper.safeDraw(player, owner, clipboard, min, max); - } + private void drawCuboid(Vector min, Vector max, boolean scheduled, boolean clipboard, Player owner) { + //noinspection deprecation + if(owner.getItemInHand().getType() != WAND) { + WorldEditRendererWrapper.impl.hide(owner, true, true); + WorldEditRendererWrapper.impl.hide(owner, false, true); + } else { + WorldEditRendererWrapper.impl.hide(owner, true, false); + WorldEditRendererWrapper.impl.hide(owner, false, false); + WorldEditRendererWrapper.safeDraw(owner, scheduled, clipboard, min, max); } } @@ -110,20 +106,20 @@ public class WorldEditRenderer implements Listener { if(event.getPlayer().getItemInHand().getType() == WAND) { WorldEditRendererWrapper.impl.tick(event.getPlayer()); } - renderClipboard(event.getPlayer(), we.getSession(event.getPlayer())); + renderClipboard(event.getPlayer(), we.getSession(event.getPlayer()), false); } @EventHandler public void onPlayerInteract(PlayerInteractEvent event) { Bukkit.getScheduler().runTaskLater(Core.getInstance(), () -> { - renderRegion(event.getPlayer(), we.getSession(event.getPlayer())); + renderRegion(event.getPlayer(), we.getSession(event.getPlayer()), false); }, 0); } @EventHandler public void onBlockBreak(BlockBreakEvent event) { Bukkit.getScheduler().runTaskLater(Core.getInstance(), () -> { - renderRegion(event.getPlayer(), we.getSession(event.getPlayer())); + renderRegion(event.getPlayer(), we.getSession(event.getPlayer()), false); }, 0); } @@ -132,8 +128,8 @@ public class WorldEditRenderer implements Listener { if (event.getMessage().startsWith("//")) { Bukkit.getScheduler().runTaskLater(Core.getInstance(), () -> { LocalSession session = we.getSession(event.getPlayer()); - renderRegion(event.getPlayer(), session); - renderClipboard(event.getPlayer(), session); + renderRegion(event.getPlayer(), session, false); + renderClipboard(event.getPlayer(), session, false); }, 5); } } @@ -141,19 +137,19 @@ public class WorldEditRenderer implements Listener { @EventHandler public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { Bukkit.getScheduler().runTaskLater(Core.getInstance(), () -> { - renderPlayer(event.getPlayer()); + renderPlayer(event.getPlayer(), false); }, 1); } @EventHandler public void onPlayerDropItem(PlayerDropItemEvent event) { - renderPlayer(event.getPlayer()); + renderPlayer(event.getPlayer(), false); } @EventHandler public void onPlayerItemHeld(PlayerItemHeldEvent event) { Bukkit.getScheduler().runTaskLater(Core.getInstance(), () -> { - renderPlayer(event.getPlayer()); + renderPlayer(event.getPlayer(), false); }, 1); } diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRendererCUIEditor.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRendererCUIEditor.java index 46fe53de..d03fcf41 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRendererCUIEditor.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRendererCUIEditor.java @@ -41,8 +41,7 @@ public class WorldEditRendererCUIEditor { public enum Type { SELECTION("cui_selection_material", "cui_selection_width", Material.PURPLE_CONCRETE, Width.LARGE), CLIPBOARD("cui_clipboard_material", "cui_clipboard_width", Material.LIME_CONCRETE, Width.LARGE), - SELECTION_OTHER("cui_selection_other_material", "cui_selection_other_width", Material.GRAY_CONCRETE, Width.SLIM), - CLIPBOARD_OTHER("cui_clipboard_other_material", "cui_clipboard_other_width", Material.GRAY_CONCRETE, Width.SLIM); + ; private final String configMaterial; private final String configWidth; @@ -103,10 +102,8 @@ public class WorldEditRendererCUIEditor { @Register public void cuiEditor(Player player) { SWInventory inv = new SWInventory(player, 9 * 2, Core.MESSAGE.parse("WORLDEDIT_CUI_TITLE", player)); - setElement(inv, player, 1, "WORLDEDIT_CUI_SELECTION", Type.SELECTION); - setElement(inv, player, 3, "WORLDEDIT_CUI_CLIPBOARD", Type.CLIPBOARD); - setElement(inv, player, 5, "WORLDEDIT_CUI_SELECTION_OTHER", Type.SELECTION_OTHER); - setElement(inv, player, 7, "WORLDEDIT_CUI_CLIPBOARD_OTHER", Type.CLIPBOARD_OTHER); + setElement(inv, player, 3, "WORLDEDIT_CUI_SELECTION", Type.SELECTION); + setElement(inv, player, 5, "WORLDEDIT_CUI_CLIPBOARD", Type.CLIPBOARD); inv.open(); } diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRendererWrapper.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRendererWrapper.java index c303ed19..79ed288b 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRendererWrapper.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRendererWrapper.java @@ -26,19 +26,19 @@ public interface WorldEditRendererWrapper { WorldEditRendererWrapper fallback = VersionDependent.getVersionImpl(Core.getInstance(), 9); WorldEditRendererWrapper impl = VersionDependent.getVersionImpl(Core.getInstance()); - static void safeDraw(Player player, Player owner, boolean clipboard, Vector pos1, Vector pos2) { + static void safeDraw(Player player, boolean scheduled, boolean clipboard, Vector pos1, Vector pos2) { if (Core.isBedrockPlayer(player) || PlayerVersion.getVersion(player) < 20) { - fallback.draw(player, owner, clipboard, pos1, pos2); + fallback.draw(player, scheduled, clipboard, pos1, pos2); } else { - impl.draw(player, owner, clipboard, pos1, pos2); + impl.draw(player, scheduled, clipboard, pos1, pos2); } } - void draw(Player player, Player owner, boolean clipboard, Vector pos1, Vector pos2); + void draw(Player player, boolean scheduled, boolean clipboard, Vector pos1, Vector pos2); void tick(Player player); - void hide(Player player, Player owner, boolean clipboard, boolean hide); + void hide(Player player, boolean clipboard, boolean hide); void remove(Player player); }