From 0cc9a28f4d92e231ee69c4e28f4e9fb260f38eae Mon Sep 17 00:00:00 2001 From: Daniel Saukel Date: Sun, 27 Dec 2015 14:07:30 +0100 Subject: [PATCH] Fix group signs not loading correctly ...and minor further fixes. --- .../dre2n/dungeonsxl/global/DPortal.java | 1 + .../dre2n/dungeonsxl/global/GroupSign.java | 56 +++++- .../dungeonsxl/listener/BlockListener.java | 178 ++++++++++-------- .../dre2n/dungeonsxl/player/DGroup.java | 10 +- 4 files changed, 150 insertions(+), 95 deletions(-) diff --git a/src/io/github/dre2n/dungeonsxl/global/DPortal.java b/src/io/github/dre2n/dungeonsxl/global/DPortal.java index 0affb088..241a94c7 100644 --- a/src/io/github/dre2n/dungeonsxl/global/DPortal.java +++ b/src/io/github/dre2n/dungeonsxl/global/DPortal.java @@ -95,6 +95,7 @@ public class DPortal { if (dgroup.getGameWorld() == null) { MessageUtil.sendMessage(player, plugin.getDMessages().get("Error_DungeonNotExist", DGroup.get(player).getMapName())); + return; } if (dgroup.getGameWorld().getLocLobby() == null) { diff --git a/src/io/github/dre2n/dungeonsxl/global/GroupSign.java b/src/io/github/dre2n/dungeonsxl/global/GroupSign.java index 45e6e6bc..47fe3188 100644 --- a/src/io/github/dre2n/dungeonsxl/global/GroupSign.java +++ b/src/io/github/dre2n/dungeonsxl/global/GroupSign.java @@ -43,7 +43,7 @@ public class GroupSign { this.startSign = startSign; dGroups = new DGroup[maxGroups]; - this.multiFloor = multiFloor; + this.setMultiFloor(multiFloor); if (multiFloor) { dungeonName = identifier; Dungeon dungeon = plugin.getDungeons().getDungeon(identifier); @@ -81,6 +81,36 @@ public class GroupSign { this.dungeonName = dungeonName; } + /** + * @return the mapName + */ + public String getMapName() { + return mapName; + } + + /** + * @param mapName + * the mapName to set + */ + public void setMapName(String mapName) { + this.mapName = mapName; + } + + /** + * @return the multiFloor + */ + public boolean isMultiFloor() { + return multiFloor; + } + + /** + * @param multiFloor + * the multiFloor to set + */ + public void setMultiFloor(boolean multiFloor) { + this.multiFloor = multiFloor; + } + public void update() { int i = 0; for (DGroup dGroup : dGroups) { @@ -347,17 +377,20 @@ public class GroupSign { } if ( !GameWorld.canPlayDungeon(groupSign.mapName, player)) { - File file = new File(DungeonsXL.getPlugin().getDataFolder() + "/maps/" + groupSign.mapName, "config.yml"); + File file = new File(plugin.getDataFolder() + "/maps/" + groupSign.mapName, "config.yml"); if (file != null) { WorldConfig confReader = new WorldConfig(file); if (confReader != null) { - MessageUtil.sendMessage(player, DungeonsXL.getPlugin().getDMessages().get("Error_Cooldown", "" + confReader.getTimeToNextPlay())); + MessageUtil.sendMessage(player, plugin.getDMessages().get("Error_Cooldown", "" + confReader.getTimeToNextPlay())); } } + + return true; } if ( !GameWorld.checkRequirements(groupSign.mapName, player)) { - MessageUtil.sendMessage(player, DungeonsXL.getPlugin().getDMessages().get("Error_Requirements")); + MessageUtil.sendMessage(player, plugin.getDMessages().get("Error_Requirements")); + return true; } int sx1 = groupSign.startSign.getX(), sy1 = groupSign.startSign.getY(), sz1 = groupSign.startSign.getZ(); @@ -379,7 +412,12 @@ public class GroupSign { Sign topSign = (Sign) topBlock.getState(); if (topSign.getLine(0).equals(strNewGrp)) { if (DGroup.get(player) == null) { - groupSign.dGroups[column] = new DGroup(player, groupSign.mapName, groupSign.multiFloor); + if (groupSign.isMultiFloor()) { + groupSign.dGroups[column] = new DGroup(player, groupSign.dungeonName, groupSign.isMultiFloor()); + + } else { + groupSign.dGroups[column] = new DGroup(player, groupSign.mapName, groupSign.isMultiFloor()); + } groupSign.update(); } @@ -451,7 +489,7 @@ public class GroupSign { configFile.set(preString + ".z", groupSign.startSign.getZ()); // Etc. - if (groupSign.multiFloor) { + if (groupSign.isMultiFloor()) { configFile.set(preString + ".dungeon", groupSign.dungeonName); } else { @@ -460,7 +498,7 @@ public class GroupSign { configFile.set(preString + ".maxGroups", groupSign.dGroups.length); configFile.set(preString + ".maxPlayersPerGroup", groupSign.maxPlayersPerGroup); - configFile.set(preString + ".multiFloor", groupSign.multiFloor); + configFile.set(preString + ".multiFloor", groupSign.isMultiFloor()); } } @@ -480,8 +518,8 @@ public class GroupSign { int maxGroups = configFile.getInt(preString + ".maxGroups"); int maxPlayersPerGroup = configFile.getInt(preString + ".maxPlayersPerGroup"); boolean multiFloor = false; - if (configFile.contains("multiFloor")) { - multiFloor = configFile.getBoolean("multiFloor"); + if (configFile.contains(preString + ".multiFloor")) { + multiFloor = configFile.getBoolean(preString + ".multiFloor"); } Block startSign = world.getBlockAt(configFile.getInt(preString + ".x"), configFile.getInt(preString + ".y"), configFile.getInt(preString + ".z")); diff --git a/src/io/github/dre2n/dungeonsxl/listener/BlockListener.java b/src/io/github/dre2n/dungeonsxl/listener/BlockListener.java index fb82853a..eac0cd2f 100644 --- a/src/io/github/dre2n/dungeonsxl/listener/BlockListener.java +++ b/src/io/github/dre2n/dungeonsxl/listener/BlockListener.java @@ -32,10 +32,12 @@ public class BlockListener implements Listener { @EventHandler(priority = EventPriority.HIGH) public void onBlockPhysics(BlockPhysicsEvent event) { - if (event.getBlock().getType() == Material.PORTAL) { - if (DPortal.get(event.getBlock()) != null) { - event.setCancelled(true); - } + if (event.getBlock().getType() != Material.PORTAL) { + return; + } + + if (DPortal.get(event.getBlock()) != null) { + event.setCancelled(true); } } @@ -72,14 +74,14 @@ public class BlockListener implements Listener { } // Editworld Signs - EditWorld eworld = EditWorld.get(block.getWorld()); - if (eworld != null) { - eworld.getSign().remove(event.getBlock()); + EditWorld editWorld = EditWorld.get(block.getWorld()); + if (editWorld != null) { + editWorld.getSign().remove(event.getBlock()); } // Deny GameWorld Blocks - GameWorld gworld = GameWorld.get(block.getWorld()); - if (gworld != null) { + GameWorld gameWorld = GameWorld.get(block.getWorld()); + if (gameWorld != null) { event.setCancelled(true); } @@ -90,25 +92,28 @@ public class BlockListener implements Listener { Block block = event.getBlock(); // Deny GameWorld Blocks - GameWorld gworld = GameWorld.get(block.getWorld()); - if (gworld != null) { - if ( !GamePlaceableBlock.canBuildHere(block, block.getFace(event.getBlockAgainst()), event.getItemInHand().getType(), gworld)) { - - // Workaround for a bug that would allow 3-Block-high jumping - Location loc = event.getPlayer().getLocation(); - if (loc.getY() > block.getY() + 1.0 && loc.getY() <= block.getY() + 1.5) { - if (loc.getX() >= block.getX() - 0.3 && loc.getX() <= block.getX() + 1.3) { - if (loc.getZ() >= block.getZ() - 0.3 && loc.getZ() <= block.getZ() + 1.3) { - loc.setX(block.getX() + 0.5); - loc.setY(block.getY()); - loc.setZ(block.getZ() + 0.5); - event.getPlayer().teleport(loc); - } - } + GameWorld gameWorld = GameWorld.get(block.getWorld()); + if (gameWorld == null) { + return; + } + + if (GamePlaceableBlock.canBuildHere(block, block.getFace(event.getBlockAgainst()), event.getItemInHand().getType(), gameWorld)) { + return; + } + + // Workaround for a bug that would allow 3-Block-high jumping + Location loc = event.getPlayer().getLocation(); + if (loc.getY() > block.getY() + 1.0 && loc.getY() <= block.getY() + 1.5) { + if (loc.getX() >= block.getX() - 0.3 && loc.getX() <= block.getX() + 1.3) { + if (loc.getZ() >= block.getZ() - 0.3 && loc.getZ() <= block.getZ() + 1.3) { + loc.setX(block.getX() + 0.5); + loc.setY(block.getY()); + loc.setZ(block.getZ() + 0.5); + event.getPlayer().teleport(loc); } - event.setCancelled(true); } } + event.setCancelled(true); } @EventHandler(priority = EventPriority.NORMAL) @@ -116,40 +121,48 @@ public class BlockListener implements Listener { Player player = event.getPlayer(); Block block = event.getBlock(); String[] lines = event.getLines(); - EditWorld eworld = EditWorld.get(player.getWorld()); + EditWorld editWorld = EditWorld.get(player.getWorld()); // Group Signs - if (eworld == null) { - if (player.isOp() || player.hasPermission("dxl.sign")) { - if (lines[0].equalsIgnoreCase("[DXL]")) { - if (lines[1].equalsIgnoreCase("Group")) { - String dungeonName = lines[2]; - - String[] data = lines[3].split("\\,"); - if (data.length >= 2 && data.length <= 3) { - int maxGroups = IntegerUtil.parseInt(data[0]); - int maxPlayersPerGroup = IntegerUtil.parseInt(data[1]); - boolean multiFloor = false; - if (data.length == 3) { - if (data[2].equals("+")) { - multiFloor = true; - } - } - if (maxGroups > 0 && maxPlayersPerGroup > 0) { - if (GroupSign.tryToCreate(event.getBlock(), dungeonName, maxGroups, maxPlayersPerGroup, multiFloor) != null) { - event.setCancelled(true); - } - } + if (editWorld == null) { + if ( !player.hasPermission("dxl.sign")) { + return; + } + + if ( !lines[0].equalsIgnoreCase("[DXL]")) { + return; + } + + if (lines[1].equalsIgnoreCase("Group")) { + String dungeonName = lines[2]; + + String[] data = lines[3].split("\\,"); + if (data.length >= 2 && data.length <= 3) { + int maxGroups = IntegerUtil.parseInt(data[0]); + int maxPlayersPerGroup = IntegerUtil.parseInt(data[1]); + boolean multiFloor = false; + if (data.length == 3) { + if (data[2].equals("+")) { + multiFloor = true; } - } else if (lines[1].equalsIgnoreCase("Leave")) { - if (block.getState() instanceof Sign) { - Sign sign = (Sign) block.getState(); - new LeaveSign(sign); + } + + if (maxGroups > 0 && maxPlayersPerGroup > 0) { + if (GroupSign.tryToCreate(event.getBlock(), dungeonName, maxGroups, maxPlayersPerGroup, multiFloor) != null) { + event.setCancelled(true); } - event.setCancelled(true); } } + + } else if (lines[1].equalsIgnoreCase("Leave")) { + if (block.getState() instanceof Sign) { + Sign sign = (Sign) block.getState(); + new LeaveSign(sign); + } + + event.setCancelled(true); } + } else { // Editworld Signs Sign sign = (Sign) block.getState(); if (sign != null) { @@ -160,20 +173,21 @@ public class BlockListener implements Listener { DSign dsign = DSign.create(sign, null); - if (dsign != null) { - if (player.isOp() || player.hasPermission(dsign.getType().getBuildPermission())) { - if (dsign.check()) { - eworld.checkSign(block); - eworld.getSign().add(block); - MessageUtil.sendMessage(player, DungeonsXL.getPlugin().getDMessages().get("Player_SignCreated")); - - } else { - MessageUtil.sendMessage(player, DungeonsXL.getPlugin().getDMessages().get("Error_SignWrongFormat")); - } - - } else { - MessageUtil.sendMessage(player, DungeonsXL.getPlugin().getDMessages().get("Error_NoPermissions")); - } + if (dsign == null) { + return; + } + + if ( !player.hasPermission(dsign.getType().getBuildPermission())) { + MessageUtil.sendMessage(player, DungeonsXL.getPlugin().getDMessages().get("Error_NoPermissions")); + } + + if (dsign.check()) { + editWorld.checkSign(block); + editWorld.getSign().add(block); + MessageUtil.sendMessage(player, DungeonsXL.getPlugin().getDMessages().get("Player_SignCreated")); + + } else { + MessageUtil.sendMessage(player, DungeonsXL.getPlugin().getDMessages().get("Error_SignWrongFormat")); } } } @@ -183,18 +197,20 @@ public class BlockListener implements Listener { public void onBlockSpread(BlockSpreadEvent event) { Block block = event.getBlock(); // Block the Spread off Vines - if (block.getType() == Material.VINE) { - // Check GameWorlds - GameWorld gworld = GameWorld.get(event.getBlock().getWorld()); - if (gworld != null) { - event.setCancelled(true); - } - - // Check EditWorlds - EditWorld eworld = EditWorld.get(event.getBlock().getWorld()); - if (eworld != null) { - event.setCancelled(true); - } + if (block.getType() != Material.VINE) { + return; + } + + // Check GameWorlds + GameWorld gameWorld = GameWorld.get(event.getBlock().getWorld()); + if (gameWorld != null) { + event.setCancelled(true); + } + + // Check EditWorlds + EditWorld editWorld = EditWorld.get(event.getBlock().getWorld()); + if (editWorld != null) { + event.setCancelled(true); } } @@ -213,9 +229,9 @@ public class BlockListener implements Listener { @Override public void run() { - for (GameWorld gworld : DungeonsXL.getPlugin().getGameWorlds()) { - if (block.getWorld() == gworld.getWorld()) { - RedstoneTrigger.updateAll(gworld); + for (GameWorld gameWorld : DungeonsXL.getPlugin().getGameWorlds()) { + if (block.getWorld() == gameWorld.getWorld()) { + RedstoneTrigger.updateAll(gameWorld); } } } diff --git a/src/io/github/dre2n/dungeonsxl/player/DGroup.java b/src/io/github/dre2n/dungeonsxl/player/DGroup.java index 8bea0388..6f6a7558 100644 --- a/src/io/github/dre2n/dungeonsxl/player/DGroup.java +++ b/src/io/github/dre2n/dungeonsxl/player/DGroup.java @@ -30,12 +30,12 @@ public class DGroup { plugin.getDGroups().add(this); this.players.add(player); - if (multiFloor) { + + Dungeon dungeon = plugin.getDungeons().getDungeon(identifier); + if (multiFloor && dungeon != null) { this.dungeonName = identifier; - this.mapName = plugin.getDungeons().getDungeon(dungeonName).getConfig().getStartFloor(); - System.out.println("This one?"); - this.unplayedFloors = plugin.getDungeons().getDungeon(dungeonName).getConfig().getFloors(); - System.out.println("If this shows p,"); + this.mapName = dungeon.getConfig().getStartFloor(); + this.unplayedFloors = dungeon.getConfig().getFloors(); } else { this.mapName = identifier;