diff --git a/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java b/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java index dfdc95f..1e6c8d6 100644 --- a/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java +++ b/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -32,6 +33,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Pattern; +import me.ryanhamshire.GriefPrevention.events.VisualizationEvent; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; @@ -1819,6 +1821,9 @@ class PlayerEventHandler implements Listener //find nearby claims Set claims = this.dataStore.getNearbyClaims(player.getLocation()); + // alert plugins of a visualization + Bukkit.getPluginManager().callEvent(new VisualizationEvent(player, claims)); + //visualize boundaries Visualization visualization = Visualization.fromClaims(claims, player.getEyeLocation().getBlockY(), VisualizationType.Claim, player.getLocation()); Visualization.Apply(player, visualization); @@ -1846,6 +1851,10 @@ class PlayerEventHandler implements Listener if(clickedBlockType == Material.AIR) { instance.sendMessage(player, TextMode.Err, Messages.TooFarAway); + + // alert plugins of a visualization + Bukkit.getPluginManager().callEvent(new VisualizationEvent(player, Collections.emptySet())); + Visualization.Revert(player); return; } @@ -1857,6 +1866,10 @@ class PlayerEventHandler implements Listener if(claim == null) { instance.sendMessage(player, TextMode.Info, Messages.BlockNotClaimed); + + // alert plugins of a visualization + Bukkit.getPluginManager().callEvent(new VisualizationEvent(player, Collections.emptySet())); + Visualization.Revert(player); } @@ -1868,6 +1881,10 @@ class PlayerEventHandler implements Listener //visualize boundary Visualization visualization = Visualization.FromClaim(claim, player.getEyeLocation().getBlockY(), VisualizationType.Claim, player.getLocation()); + + // alert plugins of a visualization + Bukkit.getPluginManager().callEvent(new VisualizationEvent(player, claim)); + Visualization.Apply(player, visualization); //if can resize this claim, tell about the boundaries @@ -1971,6 +1988,10 @@ class PlayerEventHandler implements Listener { instance.sendMessage(player, TextMode.Err, Messages.BlockClaimed, claim.getOwnerName()); Visualization visualization = Visualization.FromClaim(claim, clickedBlock.getY(), VisualizationType.ErrorClaim, player.getLocation()); + + // alert plugins of a visualization + Bukkit.getPluginManager().callEvent(new VisualizationEvent(player, claim)); + Visualization.Apply(player, visualization); return; @@ -2249,6 +2270,10 @@ class PlayerEventHandler implements Listener instance.sendMessage(player, TextMode.Err, Messages.CreateSubdivisionOverlap); Visualization visualization = Visualization.FromClaim(result.claim, clickedBlock.getY(), VisualizationType.ErrorClaim, player.getLocation()); + + // alert plugins of a visualization + Bukkit.getPluginManager().callEvent(new VisualizationEvent(player, result.claim)); + Visualization.Apply(player, visualization); return; @@ -2259,6 +2284,10 @@ class PlayerEventHandler implements Listener { instance.sendMessage(player, TextMode.Success, Messages.SubdivisionSuccess); Visualization visualization = Visualization.FromClaim(result.claim, clickedBlock.getY(), VisualizationType.Claim, player.getLocation()); + + // alert plugins of a visualization + Bukkit.getPluginManager().callEvent(new VisualizationEvent(player, result.claim)); + Visualization.Apply(player, visualization); playerData.lastShovelLocation = null; playerData.claimSubdividing = null; @@ -2272,6 +2301,10 @@ class PlayerEventHandler implements Listener { instance.sendMessage(player, TextMode.Err, Messages.CreateClaimFailOverlap); Visualization visualization = Visualization.FromClaim(claim, clickedBlock.getY(), VisualizationType.Claim, player.getLocation()); + + // alert plugins of a visualization + Bukkit.getPluginManager().callEvent(new VisualizationEvent(player, claim)); + Visualization.Apply(player, visualization); } } @@ -2281,6 +2314,10 @@ class PlayerEventHandler implements Listener { instance.sendMessage(player, TextMode.Err, Messages.CreateClaimFailOverlapOtherPlayer, claim.getOwnerName()); Visualization visualization = Visualization.FromClaim(claim, clickedBlock.getY(), VisualizationType.ErrorClaim, player.getLocation()); + + // alert plugins of a visualization + Bukkit.getPluginManager().callEvent(new VisualizationEvent(player, claim)); + Visualization.Apply(player, visualization); } @@ -2314,7 +2351,12 @@ class PlayerEventHandler implements Listener instance.sendMessage(player, TextMode.Instr, Messages.ClaimStart); //show him where he's working - Visualization visualization = Visualization.FromClaim(new Claim(clickedBlock.getLocation(), clickedBlock.getLocation(), null, new ArrayList(), new ArrayList(), new ArrayList(), new ArrayList(), null), clickedBlock.getY(), VisualizationType.RestoreNature, player.getLocation()); + Claim newClaim = new Claim(clickedBlock.getLocation(), clickedBlock.getLocation(), null, new ArrayList(), new ArrayList(), new ArrayList(), new ArrayList(), null); + Visualization visualization = Visualization.FromClaim(newClaim, clickedBlock.getY(), VisualizationType.RestoreNature, player.getLocation()); + + // alert plugins of a visualization + Bukkit.getPluginManager().callEvent(new VisualizationEvent(player, newClaim)); + Visualization.Apply(player, visualization); } @@ -2399,6 +2441,10 @@ class PlayerEventHandler implements Listener instance.sendMessage(player, TextMode.Err, Messages.CreateClaimFailOverlapShort); Visualization visualization = Visualization.FromClaim(result.claim, clickedBlock.getY(), VisualizationType.ErrorClaim, player.getLocation()); + + // alert plugins of a visualization + Bukkit.getPluginManager().callEvent(new VisualizationEvent(player, result.claim)); + Visualization.Apply(player, visualization); } else @@ -2414,6 +2460,10 @@ class PlayerEventHandler implements Listener { instance.sendMessage(player, TextMode.Success, Messages.CreateClaimSuccess); Visualization visualization = Visualization.FromClaim(result.claim, clickedBlock.getY(), VisualizationType.Claim, player.getLocation()); + + // alert plugins of a visualization + Bukkit.getPluginManager().callEvent(new VisualizationEvent(player, result.claim)); + Visualization.Apply(player, visualization); playerData.lastShovelLocation = null; diff --git a/src/me/ryanhamshire/GriefPrevention/events/VisualizationEvent.java b/src/me/ryanhamshire/GriefPrevention/events/VisualizationEvent.java new file mode 100644 index 0000000..2b2a19a --- /dev/null +++ b/src/me/ryanhamshire/GriefPrevention/events/VisualizationEvent.java @@ -0,0 +1,69 @@ +package me.ryanhamshire.GriefPrevention.events; + +import me.ryanhamshire.GriefPrevention.Claim; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +import java.util.Collection; +import java.util.Collections; + +/** + * Called when GriefPrevention is sending claim visuals to a player + */ +public class VisualizationEvent extends PlayerEvent { + private static final HandlerList handlers = new HandlerList(); + private final Collection claims; + private final boolean showSubdivides; + + /** + * New visualization being sent to player + * + * @param player Player receiving visuals + * @param claim The claim being visualized (with subdivides), or null if visuals being removed + */ + public VisualizationEvent(Player player, Claim claim) { + super(player); + this.claims = Collections.singleton(claim); + this.showSubdivides = true; + } + + /** + * New visualization being sent to player + * + * @param player Player receiving visuals + * @param claims Claims being visualized (without subdivides) + */ + public VisualizationEvent(Player player, Collection claims) { + super(player); + this.claims = claims; + this.showSubdivides = false; + } + + /** + * Get the claims being visualized, or null if visualization being removed + * + * @return Claims being visualized + */ + public Collection getClaims() { + return claims; + } + + /** + * Check if subdivide claims are being shown + * + * @return True if subdivide claims are being shown + */ + public boolean showSubdivides() { + return showSubdivides; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +}