From 3a3d3632a914e3bd9acf2f29e05c2e94c3d12ad4 Mon Sep 17 00:00:00 2001 From: RoboMWM Date: Tue, 15 Nov 2016 12:36:59 -0800 Subject: [PATCH] Implement AccrueClaimBlocksEvent. Closes #18 --- .../DeliverClaimBlocksTask.java | 33 +++++++---- .../GriefPrevention/GriefPrevention.java | 2 +- .../events/AccrueClaimBlocksEvent.java | 56 +++++++++++++++++++ 3 files changed, 80 insertions(+), 11 deletions(-) create mode 100644 src/me/ryanhamshire/GriefPrevention/events/AccrueClaimBlocksEvent.java diff --git a/src/me/ryanhamshire/GriefPrevention/DeliverClaimBlocksTask.java b/src/me/ryanhamshire/GriefPrevention/DeliverClaimBlocksTask.java index d567090..699776a 100644 --- a/src/me/ryanhamshire/GriefPrevention/DeliverClaimBlocksTask.java +++ b/src/me/ryanhamshire/GriefPrevention/DeliverClaimBlocksTask.java @@ -20,6 +20,7 @@ import java.util.Collection; +import me.ryanhamshire.GriefPrevention.events.AccrueClaimBlocksEvent; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -29,10 +30,12 @@ import org.bukkit.entity.Player; class DeliverClaimBlocksTask implements Runnable { private Player player; + private GriefPrevention instance; - public DeliverClaimBlocksTask(Player player) + public DeliverClaimBlocksTask(Player player, GriefPrevention instance) { this.player = player; + this.instance = instance; } @Override @@ -47,17 +50,20 @@ class DeliverClaimBlocksTask implements Runnable long i = 0; for(Player onlinePlayer : players) { - DeliverClaimBlocksTask newTask = new DeliverClaimBlocksTask(onlinePlayer); - GriefPrevention.instance.getServer().getScheduler().scheduleSyncDelayedTask(GriefPrevention.instance, newTask, i++); + DeliverClaimBlocksTask newTask = new DeliverClaimBlocksTask(onlinePlayer, instance); + instance.getServer().getScheduler().scheduleSyncDelayedTask(instance, newTask, i++); } } //otherwise, deliver claim blocks to the specified player else { - if(!this.player.isOnline()) return; + if(!this.player.isOnline()) + { + return; + } - DataStore dataStore = GriefPrevention.instance.dataStore; + DataStore dataStore = instance.dataStore; PlayerData playerData = dataStore.getPlayerData(player.getUniqueId()); Location lastLocation = playerData.lastAfkCheckLocation; @@ -69,15 +75,22 @@ class DeliverClaimBlocksTask implements Runnable (lastLocation == null || lastLocation.distanceSquared(player.getLocation()) >= 0) && !player.getLocation().getBlock().isLiquid()) { - //determine how fast blocks accrue for this player - int accrualRate = GriefPrevention.instance.config_claims_blocksAccruedPerHour_default; - if(player.hasPermission("griefprevention.fastestaccrual")) accrualRate = GriefPrevention.instance.config_claims_blocksAccruedPerHour_fastest; - else if(player.hasPermission("griefprevention.fasteraccrual")) accrualRate = GriefPrevention.instance.config_claims_blocksAccruedPerHour_faster; + //determine how fast blocks accrue for this player //RoboMWM: addons determine this instead + int accrualRate = instance.config_claims_blocksAccruedPerHour_default; +// if(player.hasPermission("griefprevention.fastestaccrual")) accrualRate = GriefPrevention.instance.config_claims_blocksAccruedPerHour_fastest; +// else if(player.hasPermission("griefprevention.fasteraccrual")) accrualRate = GriefPrevention.instance.config_claims_blocksAccruedPerHour_faster; //add blocks int accruedBlocks = accrualRate / 6; if(accruedBlocks < 0) accruedBlocks = 1; - playerData.accrueBlocks(accruedBlocks); + AccrueClaimBlocksEvent event = new AccrueClaimBlocksEvent(player, accrualRate); + instance.getServer().getPluginManager().callEvent(event); + if (event.isCancelled()) + { + GriefPrevention.AddLogEntry(player.getName() + " claim block delivery was canceled by another plugin.", CustomLogEntryTypes.Debug, true); + return; + } + playerData.accrueBlocks(event.getBlocksToAccrue()); GriefPrevention.AddLogEntry("Delivering " + accruedBlocks + " blocks to " + player.getName(), CustomLogEntryTypes.Debug, true); //intentionally NOT saving data here to reduce overall secondary storage access frequency diff --git a/src/me/ryanhamshire/GriefPrevention/GriefPrevention.java b/src/me/ryanhamshire/GriefPrevention/GriefPrevention.java index 8e7f1b8..28297e8 100644 --- a/src/me/ryanhamshire/GriefPrevention/GriefPrevention.java +++ b/src/me/ryanhamshire/GriefPrevention/GriefPrevention.java @@ -318,7 +318,7 @@ public class GriefPrevention extends JavaPlugin //20L ~ 1 second if(this.config_claims_blocksAccruedPerHour_default > 0 || this.config_claims_blocksAccruedPerHour_faster > 0 || this.config_claims_blocksAccruedPerHour_fastest > 0) { - DeliverClaimBlocksTask task = new DeliverClaimBlocksTask(null); + DeliverClaimBlocksTask task = new DeliverClaimBlocksTask(null, this); this.getServer().getScheduler().scheduleSyncRepeatingTask(this, task, 20L * 60 * 10, 20L * 60 * 10); } diff --git a/src/me/ryanhamshire/GriefPrevention/events/AccrueClaimBlocksEvent.java b/src/me/ryanhamshire/GriefPrevention/events/AccrueClaimBlocksEvent.java new file mode 100644 index 0000000..c8e2e77 --- /dev/null +++ b/src/me/ryanhamshire/GriefPrevention/events/AccrueClaimBlocksEvent.java @@ -0,0 +1,56 @@ +package me.ryanhamshire.GriefPrevention.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Created by Robo on 11/15/2016. + */ +public class AccrueClaimBlocksEvent extends Event +{ + // Custom Event Requirements + private static final HandlerList handlers = new HandlerList(); + public static HandlerList getHandlerList() { + return handlers; + } + @Override + public HandlerList getHandlers() { + return handlers; + } + + private Player player; + private int blocksToAccrue; + private boolean cancelled = false; + + public AccrueClaimBlocksEvent(Player player, int blocksToAccrue) + { + this.player = player; + this.blocksToAccrue = blocksToAccrue; + } + + public Player getPlayer() + { + return this.player; + } + + public int getBlocksToAccrue() + { + return this.blocksToAccrue; + } + + public boolean isCancelled() + { + return this.cancelled; + } + + public void setBlocksToAccrue(int blocksToAccrue) + { + this.blocksToAccrue = blocksToAccrue; + } + + public void setCancelled(boolean cancel) + { + this.cancelled = cancel; + } +}