Fix the race condition when protecting blocks, fixes #34
This commit is contained in:
parent
2c85300e3b
commit
7fd0a8ddc7
@ -14,7 +14,6 @@ import com.graywolf336.jail.command.JailHandler;
|
|||||||
import com.graywolf336.jail.enums.Lang;
|
import com.graywolf336.jail.enums.Lang;
|
||||||
import com.graywolf336.jail.enums.Settings;
|
import com.graywolf336.jail.enums.Settings;
|
||||||
import com.graywolf336.jail.legacy.LegacyManager;
|
import com.graywolf336.jail.legacy.LegacyManager;
|
||||||
import com.graywolf336.jail.listeners.BlockListener;
|
|
||||||
import com.graywolf336.jail.listeners.CacheListener;
|
import com.graywolf336.jail.listeners.CacheListener;
|
||||||
import com.graywolf336.jail.listeners.CellSignListener;
|
import com.graywolf336.jail.listeners.CellSignListener;
|
||||||
import com.graywolf336.jail.listeners.EntityListener;
|
import com.graywolf336.jail.listeners.EntityListener;
|
||||||
@ -87,7 +86,6 @@ public class JailMain extends JavaPlugin {
|
|||||||
pm = new PrisonerManager(this);
|
pm = new PrisonerManager(this);
|
||||||
|
|
||||||
PluginManager plm = this.getServer().getPluginManager();
|
PluginManager plm = this.getServer().getPluginManager();
|
||||||
plm.registerEvents(new BlockListener(this), this);
|
|
||||||
plm.registerEvents(new CacheListener(this), this);
|
plm.registerEvents(new CacheListener(this), this);
|
||||||
plm.registerEvents(new CellSignListener(this), this);
|
plm.registerEvents(new CellSignListener(this), this);
|
||||||
plm.registerEvents(new EntityListener(this), this);
|
plm.registerEvents(new EntityListener(this), this);
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
package com.graywolf336.jail.listeners;
|
|
||||||
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
|
||||||
|
|
||||||
import com.graywolf336.jail.JailMain;
|
|
||||||
import com.graywolf336.jail.enums.Settings;
|
|
||||||
|
|
||||||
public class BlockListener implements Listener {
|
|
||||||
private JailMain pl;
|
|
||||||
|
|
||||||
public BlockListener(JailMain plugin) {
|
|
||||||
this.pl = plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled=true, priority = EventPriority.HIGHEST)
|
|
||||||
public void blockBreak(BlockBreakEvent event) {
|
|
||||||
//If we are protecting against block breaking, then let's do the action.
|
|
||||||
//If we're not, let's not use any processing power to get the jail
|
|
||||||
//where this block was broke at
|
|
||||||
if(pl.getConfig().getBoolean(Settings.BLOCKBREAKPROTECTION.getPath())) {
|
|
||||||
//If there is no jail let's skedaddle
|
|
||||||
if(pl.getJailManager().getJailFromLocation(event.getBlock().getLocation()) == null) return;
|
|
||||||
|
|
||||||
//If the player doesn't have permission to modify the jail,
|
|
||||||
//then we stop it here. We won't be doing any of the additions to
|
|
||||||
//a prisoner's sentence here as that's for the protections listener
|
|
||||||
if(!event.getPlayer().hasPermission("jail.modifyjail")) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled=true, priority = EventPriority.HIGHEST)
|
|
||||||
public void blockPlace(BlockPlaceEvent event) {
|
|
||||||
//If we are protecting against block placing, then let's do the action.
|
|
||||||
//If we're not, let's not use any processing power to get the jail
|
|
||||||
//where this block was placed at
|
|
||||||
if(pl.getConfig().getBoolean(Settings.BLOCKPLACEPROTECTION.getPath())) {
|
|
||||||
//If there is no jail let's skedaddle
|
|
||||||
if(pl.getJailManager().getJailFromLocation(event.getBlock().getLocation()) == null) return;
|
|
||||||
|
|
||||||
//If the player doesn't have permission to modify the jail,
|
|
||||||
//then we stop it here. We won't be doing any of the additions to
|
|
||||||
//a prisoner's sentence here as that's for the protections listener
|
|
||||||
if(!event.getPlayer().hasPermission("jail.modifyjail")) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -29,9 +29,7 @@ public class ProtectionListener implements Listener {
|
|||||||
//Before we check if the player is jailed, let's save a
|
//Before we check if the player is jailed, let's save a
|
||||||
//tiny bit of resources and check if this protection is enabled
|
//tiny bit of resources and check if this protection is enabled
|
||||||
if(pl.getConfig().getBoolean(Settings.BLOCKBREAKPROTECTION.getPath())) {
|
if(pl.getConfig().getBoolean(Settings.BLOCKBREAKPROTECTION.getPath())) {
|
||||||
//Let's check if the player is jailed, otherwise the other listener
|
//Let's check if the player is jailed
|
||||||
//in the BlockListener class will take care of protecting inside
|
|
||||||
//of the jails.
|
|
||||||
if(pl.getJailManager().isPlayerJailed(event.getPlayer().getUniqueId())) {
|
if(pl.getJailManager().isPlayerJailed(event.getPlayer().getUniqueId())) {
|
||||||
//Get the breaking whitelist, check if the current item is in there
|
//Get the breaking whitelist, check if the current item is in there
|
||||||
if(!Util.isStringInsideList(pl.getConfig().getStringList(Settings.BLOCKBREAKWHITELIST.getPath()),
|
if(!Util.isStringInsideList(pl.getConfig().getStringList(Settings.BLOCKBREAKWHITELIST.getPath()),
|
||||||
@ -63,6 +61,17 @@ public class ProtectionListener implements Listener {
|
|||||||
//Stop the event from happening, as the block wasn't in the whitelist
|
//Stop the event from happening, as the block wasn't in the whitelist
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
}else {
|
||||||
|
//The player is not jailed but they're trying to break blocks inside of the Jail
|
||||||
|
//If there is no jail let's skedaddle
|
||||||
|
if(pl.getJailManager().getJailFromLocation(event.getBlock().getLocation()) == null) return;
|
||||||
|
|
||||||
|
//If the player doesn't have permission to modify the jail,
|
||||||
|
//then we stop it here. We won't be doing any of the additions to
|
||||||
|
//a prisoner's sentence here as that's for the protections listener
|
||||||
|
if(!event.getPlayer().hasPermission("jail.modifyjail")) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -72,9 +81,7 @@ public class ProtectionListener implements Listener {
|
|||||||
//Before we check if the player is jailed, let's save a
|
//Before we check if the player is jailed, let's save a
|
||||||
//tiny bit of resources and check if this protection is enabled
|
//tiny bit of resources and check if this protection is enabled
|
||||||
if(pl.getConfig().getBoolean(Settings.BLOCKPLACEPROTECTION.getPath())) {
|
if(pl.getConfig().getBoolean(Settings.BLOCKPLACEPROTECTION.getPath())) {
|
||||||
//Let's check if the player is jailed, otherwise the other listener
|
//Let's check if the player is jailed
|
||||||
//in the BlockListener class will take care of protecting inside
|
|
||||||
//of the jails.
|
|
||||||
if(pl.getJailManager().isPlayerJailed(event.getPlayer().getUniqueId())) {
|
if(pl.getJailManager().isPlayerJailed(event.getPlayer().getUniqueId())) {
|
||||||
//Get the placing whitelist, check if the current item is in there
|
//Get the placing whitelist, check if the current item is in there
|
||||||
if(!Util.isStringInsideList(pl.getConfig().getStringList(Settings.BLOCKPLACEWHITELIST.getPath()),
|
if(!Util.isStringInsideList(pl.getConfig().getStringList(Settings.BLOCKPLACEWHITELIST.getPath()),
|
||||||
@ -106,6 +113,17 @@ public class ProtectionListener implements Listener {
|
|||||||
//Stop the event from happening, as the block wasn't in the whitelist
|
//Stop the event from happening, as the block wasn't in the whitelist
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
}else {
|
||||||
|
//The player is not jailed but they're trying to place blocks inside of the Jail
|
||||||
|
//If there is no jail let's skedaddle
|
||||||
|
if(pl.getJailManager().getJailFromLocation(event.getBlock().getLocation()) == null) return;
|
||||||
|
|
||||||
|
//If the player doesn't have permission to modify the jail,
|
||||||
|
//then we stop it here. We won't be doing any of the additions to
|
||||||
|
//a prisoner's sentence here as that's for the protections listener
|
||||||
|
if(!event.getPlayer().hasPermission("jail.modifyjail")) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user