From e12a65bf699198d3baa28186631ae5282d6146de Mon Sep 17 00:00:00 2001 From: Alastair Date: Sun, 8 Nov 2015 19:46:04 +0000 Subject: [PATCH] Had added wrong type of null checker, errors were occouring when no portals rather than anything else. --- src/Config.yml | 13 +- .../AdvancedPortalsCommand.java | 3 + .../sekwah/advancedportals/FlowStopper.java | 4 + src/com/sekwah/advancedportals/Listeners.java | 195 ++++++++++-------- .../sekwah/advancedportals/WarpCommand.java | 10 +- src/plugin.yml | 5 +- 6 files changed, 133 insertions(+), 97 deletions(-) diff --git a/src/Config.yml b/src/Config.yml index ab2d8271..4f16a40a 100644 --- a/src/Config.yml +++ b/src/Config.yml @@ -33,12 +33,14 @@ ShowSelectionBlockData: 14 # WarpEffect # 0 = disabled(no particles) -# 1 = Eye of ender explode efffect(loads of portal particles) +# 1 = Eye of ender explode effect(loads of portal particles) +# adding more soon and may create some custom ones WarpParticles: 1 # WarpSound generally suggested to keep the same as warpeffect but can usually be used for just the sound and no particle effects # 0 = disabled(no sound) # 1 = Enderman Warp Sound +# adding more soon WarpSound: 1 # In case you want to show the bungee attempting warp message @@ -48,14 +50,19 @@ ShowBungeeWarpMessage: false ShowSelectionShowDuration: 10 -# If a player is riding a entity, warp the entity too?(unless its a bungee portal) - +# If a player is riding a entity, warp the entity too?(unless its a bungee portal or any non teleporting portal) WarpRiddenEntity: true + + # Where to display the message 0 = disabled(replaces PortalWarpMessages), 1 = in chat and 2 = action bar(1.8 and above only, anything lower will print the message that would # generally on the action bar in the chat without a prefix or extra chat formatting) WarpMessageDisplay: 2 + +# Set to true if you want to use the warp command from another plugin +DisableWarpCommand: false + # Use plugin name in the warp messages UseWarpPrefix: true diff --git a/src/com/sekwah/advancedportals/AdvancedPortalsCommand.java b/src/com/sekwah/advancedportals/AdvancedPortalsCommand.java index 606f008c..b207afad 100644 --- a/src/com/sekwah/advancedportals/AdvancedPortalsCommand.java +++ b/src/com/sekwah/advancedportals/AdvancedPortalsCommand.java @@ -463,6 +463,9 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter { boolean isBungeePortal = false; boolean needsPermission = false; + + // TODO change auto complete when quotes are opened and closed. Such as autocomplete @Player and stuff when specifying commands + for(int i = 1; i < args.length; i++){ if(args[i].toLowerCase().startsWith("name:") && args[i].length() > 5){ hasName = true; diff --git a/src/com/sekwah/advancedportals/FlowStopper.java b/src/com/sekwah/advancedportals/FlowStopper.java index 99b0f551..f623ab92 100644 --- a/src/com/sekwah/advancedportals/FlowStopper.java +++ b/src/com/sekwah/advancedportals/FlowStopper.java @@ -34,6 +34,10 @@ public class FlowStopper implements Listener { Block blockTo = event.getToBlock(); Block block = event.getBlock(); + if(!Portal.portalsActive){ + return; + } + for(AdvancedPortal portal : Portal.Portals){ if(portal.worldName.equals(block.getWorld().getName())){ diff --git a/src/com/sekwah/advancedportals/Listeners.java b/src/com/sekwah/advancedportals/Listeners.java index 9317e857..ba793889 100644 --- a/src/com/sekwah/advancedportals/Listeners.java +++ b/src/com/sekwah/advancedportals/Listeners.java @@ -81,92 +81,96 @@ public class Listeners implements Listener { @EventHandler(priority = EventPriority.HIGHEST) public void onMoveEvent(PlayerMoveEvent event) { // will check if the player is in the portal or not. - if(Portal.portalsActive){ - Player player = event.getPlayer(); + if(!Portal.portalsActive){ + return; + } - Location fromloc = event.getFrom(); - Location loc = event.getTo(); - // Potentially fixes that stupid error cauzed by a bukkit update. - // Would save event.getTo() as eyeLoc and change the Y position but that seemed to teleport players. - Location eyeLoc = new Location(loc.getWorld(), loc.getX(), loc.getY() + player.getEyeHeight(), loc.getZ()); - //System.out.println(loc.getBlock().getType()); // for debugging, remove or comment out when not needed - // This is probably the culprite of the bloody problem, setting the location its pointing to the event location - // rather than sorta making a clone of the object. - //System.out.println(loc.getBlock().getType()); // for debugging, remove or comment out when not needed - AdvancedPortal[] portals = Portal.Portals; - for(AdvancedPortal portal : portals){ - if(loc.getWorld() != null && portal.worldName.equals(loc.getWorld().getName())){ - if(portal.trigger.equals(loc.getBlock().getType()) - || portal.trigger.equals(eyeLoc.getBlock().getType())){ - if((portal.pos1.getX() + 1D) >= loc.getX() && (portal.pos1.getY() + 1D) >= loc.getY() && (portal.pos1.getZ() + 1D) >= loc.getZ()){ - if(portal.pos2.getX() <= loc.getX() && portal.pos2.getY() <= loc.getY() && portal.pos2.getZ() <= loc.getZ()){ + Player player = event.getPlayer(); + + Location fromloc = event.getFrom(); + Location loc = event.getTo(); + // Potentially fixes that stupid error cauzed by a bukkit update. + // Would save event.getTo() as eyeLoc and change the Y position but that seemed to teleport players. + Location eyeLoc = new Location(loc.getWorld(), loc.getX(), loc.getY() + player.getEyeHeight(), loc.getZ()); + //System.out.println(loc.getBlock().getType()); // for debugging, remove or comment out when not needed + // This is probably the culprite of the bloody problem, setting the location its pointing to the event location + // rather than sorta making a clone of the object. + //System.out.println(loc.getBlock().getType()); // for debugging, remove or comment out when not needed + AdvancedPortal[] portals = Portal.Portals; + for(AdvancedPortal portal : portals){ + if(loc.getWorld() != null && portal.worldName.equals(loc.getWorld().getName())){ + if(portal.trigger.equals(loc.getBlock().getType()) + || portal.trigger.equals(eyeLoc.getBlock().getType())){ + if((portal.pos1.getX() + 1D) >= loc.getX() && (portal.pos1.getY() + 1D) >= loc.getY() && (portal.pos1.getZ() + 1D) >= loc.getZ()){ + if(portal.pos2.getX() <= loc.getX() && portal.pos2.getY() <= loc.getY() && portal.pos2.getZ() <= loc.getZ()){ - WarpEvent warpEvent = new WarpEvent(player, portal.portalName); - plugin.getServer().getPluginManager().callEvent(warpEvent); + WarpEvent warpEvent = new WarpEvent(player, portal.portalName); + plugin.getServer().getPluginManager().callEvent(warpEvent); - if (!event.isCancelled()) { - boolean warped = Portal.activate(player, portal.portalName); - if(PortalMessagesDisplay == 1 && warped){ - ConfigAccessor config = new ConfigAccessor(plugin, "Portals.yml"); - player.sendMessage(""); - player.sendMessage("\u00A7a[\u00A7eAdvancedPortals\u00A7a] You have been warped to \u00A7e" + config.getConfig().getString(portal.portalName + ".destination").replaceAll("_", " ") + "\u00A7."); - player.sendMessage(""); - } - else if(PortalMessagesDisplay == 2 && warped){ - ConfigAccessor config = new ConfigAccessor(plugin, "Portals.yml"); - plugin.nmsAccess.sendActionBarMessage("{text:\"\u00A7aYou have been warped to \u00A7e" + config.getConfig().getString(portal.portalName + ".destination").replaceAll("_", " ") + "\u00A7a.\"}", player); - /**plugin.nmsAccess.sendActionBarMessage("[{text:\"You have warped to \",color:green},{text:\"" + config.getConfig().getString(portal.portalName + ".destination").replaceAll("_", " ") - + "\",color:yellow},{\"text\":\".\",color:green}]", player);*/ - } - - if(warped){ - //event.setFrom(player.getLocation()); - //event.setTo(player.getLocation()); - - //event.setCancelled(true); - } - else{ - player.teleport(fromloc, PlayerTeleportEvent.TeleportCause.PLUGIN); - event.setCancelled(true); - } + if (!event.isCancelled()) { + boolean warped = Portal.activate(player, portal.portalName); + if(PortalMessagesDisplay == 1 && warped){ + ConfigAccessor config = new ConfigAccessor(plugin, "Portals.yml"); + player.sendMessage(""); + player.sendMessage("\u00A7a[\u00A7eAdvancedPortals\u00A7a] You have been warped to \u00A7e" + config.getConfig().getString(portal.portalName + ".destination").replaceAll("_", " ") + "\u00A7."); + player.sendMessage(""); + } + else if(PortalMessagesDisplay == 2 && warped){ + ConfigAccessor config = new ConfigAccessor(plugin, "Portals.yml"); + plugin.nmsAccess.sendActionBarMessage("{text:\"\u00A7aYou have been warped to \u00A7e" + config.getConfig().getString(portal.portalName + ".destination").replaceAll("_", " ") + "\u00A7a.\"}", player); + /**plugin.nmsAccess.sendActionBarMessage("[{text:\"You have warped to \",color:green},{text:\"" + config.getConfig().getString(portal.portalName + ".destination").replaceAll("_", " ") + + "\",color:yellow},{\"text\":\".\",color:green}]", player);*/ } - if(portal.trigger.equals(Material.PORTAL)){ - final Player finalplayer = event.getPlayer(); - if(player.getGameMode().equals(GameMode.CREATIVE)){ - player.setMetadata("hasWarped", new FixedMetadataValue(plugin, true)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){ - public void run(){ - finalplayer.removeMetadata("hasWarped", plugin); - } - }, 10); - } + if(warped){ + //event.setFrom(player.getLocation()); + //event.setTo(player.getLocation()); + + //event.setCancelled(true); } - else if(portal.trigger.equals(Material.LAVA)){ - final Player finalplayer = event.getPlayer(); - player.setMetadata("lavaWarped", new FixedMetadataValue(plugin, true)); + else{ + player.teleport(fromloc, PlayerTeleportEvent.TeleportCause.PLUGIN); + event.setCancelled(true); + } + } + + if(portal.trigger.equals(Material.PORTAL)){ + final Player finalplayer = event.getPlayer(); + if(player.getGameMode().equals(GameMode.CREATIVE)){ + player.setMetadata("hasWarped", new FixedMetadataValue(plugin, true)); Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){ public void run(){ - finalplayer.removeMetadata("lavaWarped", plugin); - finalplayer.setFireTicks(-1); + finalplayer.removeMetadata("hasWarped", plugin); } }, 10); } - } - } + else if(portal.trigger.equals(Material.LAVA)){ + final Player finalplayer = event.getPlayer(); + player.setMetadata("lavaWarped", new FixedMetadataValue(plugin, true)); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){ + public void run(){ + finalplayer.removeMetadata("lavaWarped", plugin); + finalplayer.setFireTicks(-1); + } + }, 10); + } + } } + } } - } } @EventHandler public void onCombustEntityEvent(EntityCombustEvent event) { + if(!Portal.portalsActive){ + return; + } Location loc = event.getEntity().getLocation(); for(AdvancedPortal portal : Portal.Portals){ if(portal.worldName.equals(loc.getWorld().getName())){ @@ -185,6 +189,9 @@ public class Listeners implements Listener { @EventHandler public void onDamEvent(EntityDamageEvent event) { + if(!Portal.portalsActive){ + return; + } //System.out.println(event.getCause()); if(event.getCause() == EntityDamageEvent.DamageCause.LAVA || event.getCause() == EntityDamageEvent.DamageCause.FIRE || event.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK){ Location loc = event.getEntity().getLocation(); @@ -214,44 +221,51 @@ public class Listeners implements Listener { @SuppressWarnings("deprecation") @EventHandler public void onPortalEvent(PlayerPortalEvent event) { - - if(Portal.portalsActive){ - Player player = event.getPlayer(); - - if(player.hasMetadata("hasWarped")){ - event.setCancelled(true); - return; - } - - Location loc = player.getLocation(); - Object[] portals = Portal.Portals; - for(AdvancedPortal portal : Portal.Portals){ - if(portal.worldName.equals(player.getWorld().getName())){ - - if((portal.pos1.getX() + 1D) >= loc.getX() && (portal.pos1.getY() + 1D) >= loc.getY() && (portal.pos1.getZ() + 1D) >= loc.getZ()){ - - if((portal.pos2.getX()) <= loc.getX() && (portal.pos2.getY()) <= loc.getY() && (portal.pos2.getZ()) <= loc.getZ()){ - - event.setCancelled(true); - - } - } - - } - } - + if(!Portal.portalsActive){ + return; } + Player player = event.getPlayer(); + + if(player.hasMetadata("hasWarped")){ + event.setCancelled(true); + return; + } + + Location loc = player.getLocation(); + Object[] portals = Portal.Portals; + for(AdvancedPortal portal : Portal.Portals){ + if(portal.worldName.equals(player.getWorld().getName())){ + + if((portal.pos1.getX() + 1D) >= loc.getX() && (portal.pos1.getY() + 1D) >= loc.getY() && (portal.pos1.getZ() + 1D) >= loc.getZ()){ + + if((portal.pos2.getX()) <= loc.getX() && (portal.pos2.getY()) <= loc.getY() && (portal.pos2.getZ()) <= loc.getZ()){ + + event.setCancelled(true); + + } + } + + } + } + } @SuppressWarnings("deprecation") @EventHandler public void onItemInteract(PlayerInteractEvent event) { + // will detect if the player is using an axe so the points of a portal can be set // also any other detections such as sign interaction or basic block protection Player player = event.getPlayer(); if(player.hasMetadata("selectingPortal") && (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK)){ + if(!Portal.portalsActive){ + player.sendMessage("\u00A7a[§7AdvancedPortals§c] There are no portals that exist to select. Portal sselection canceled."); + event.setCancelled(true); + player.removeMetadata("selectingPortal", plugin); + return; + } Block block = event.getClickedBlock(); for(AdvancedPortal portal : Portal.Portals){ if(portal.worldName.equals(block.getWorld().getName())){ @@ -260,7 +274,6 @@ public class Listeners implements Listener { if((portal.pos2.getX()) <= block.getX() && (portal.pos2.getY()) <= block.getY() && (portal.pos2.getZ()) <= block.getZ()){ player.sendMessage("\u00A7a[\u00A7eAdvancedPortals\u00A7a] You have selected: \u00A7e" + portal.portalName); - player.removeMetadata("selectingPortal", plugin); player.setMetadata("selectedPortal", new FixedMetadataValue(plugin, portal.portalName)); // adds the name to the metadata of the character event.setCancelled(true); player.removeMetadata("selectingPortal", plugin); @@ -271,7 +284,7 @@ public class Listeners implements Listener { } } - player.sendMessage("\u00A7c[\u00A77AdvancedPortals\u00A7c] No portal was selected - if you would like to stop selecting please type \u00A7e/portal select \u00A7cagain!"); + player.sendMessage("\u00A7c[\u00A77AdvancedPortals\u00A7c] No portal was selected. If you would like to stop selecting please type \u00A7e/portal select \u00A7cagain!"); event.setCancelled(true); return; } diff --git a/src/com/sekwah/advancedportals/WarpCommand.java b/src/com/sekwah/advancedportals/WarpCommand.java index 954468a6..d2248073 100644 --- a/src/com/sekwah/advancedportals/WarpCommand.java +++ b/src/com/sekwah/advancedportals/WarpCommand.java @@ -17,8 +17,14 @@ public class WarpCommand implements CommandExecutor, TabCompleter { public WarpCommand(AdvancedPortalsPlugin plugin) { this.plugin = plugin; - - plugin.getCommand("warp").setExecutor(this); + + + ConfigAccessor config = new ConfigAccessor(plugin, "Config.yml"); + boolean useWarpCommand = !config.getConfig().getBoolean("DisableWarpCommand"); + if(useWarpCommand){ + plugin.getCommand("warp").setExecutor(this); + } + plugin.getCommand("awarp").setExecutor(this); } diff --git a/src/plugin.yml b/src/plugin.yml index 185cc9f4..ae38d7fe 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ main: com.sekwah.advancedportals.AdvancedPortalsPlugin name: AdvancedPortals -version: 0.0.8 +version: 0.0.10 author: SEKWAH41 description: An advanced portals plugin for bukkit. commands: @@ -15,6 +15,9 @@ commands: warp: description: Used to warp to destinations. usage: / + awarp: + description: Used to warp to destinations (mostly used when /warp is disabled. + usage: / permissions: advancedportals.*: description: Gives access to all portal commands