merege fix
This commit is contained in:
		@@ -2,7 +2,7 @@ name: Factions
 | 
				
			|||||||
version: 1.7_dev
 | 
					version: 1.7_dev
 | 
				
			||||||
main: com.massivecraft.factions.P
 | 
					main: com.massivecraft.factions.P
 | 
				
			||||||
authors: [Olof Larsson, Brett Flannigan]
 | 
					authors: [Olof Larsson, Brett Flannigan]
 | 
				
			||||||
softdepend: [PermissionsEx, Permissions, Essentials, EssentialsChat, HeroChat, iChat, LocalAreaChat, LWC, nChat, ChatManager, CAPI, AuthMe, Vault, Spout, WorldEdit, WorldGuard]
 | 
					softdepend: [PermissionsEx, Permissions, Essentials, EssentialsChat, HeroChat, iChat, LocalAreaChat, LWC, nChat, ChatManager, CAPI, AuthMe, Vault, Spout, WorldEdit, WorldGuard, AuthDB, CaptureThePoints, CombatTag]
 | 
				
			||||||
commands:
 | 
					commands:
 | 
				
			||||||
  factions:
 | 
					  factions:
 | 
				
			||||||
    description: Reference command for Factions.
 | 
					    description: Reference command for Factions.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -385,6 +385,9 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
 | 
				
			|||||||
		long millisPassed = now - this.lastPowerUpdateTime;
 | 
							long millisPassed = now - this.lastPowerUpdateTime;
 | 
				
			||||||
		this.lastPowerUpdateTime = now;
 | 
							this.lastPowerUpdateTime = now;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Player thisPlayer = this.getPlayer();
 | 
				
			||||||
 | 
							if (thisPlayer != null && thisPlayer.isDead()) return;  // don't let dead players regain power until they respawn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		int millisPerMinute = 60*1000;		
 | 
							int millisPerMinute = 60*1000;		
 | 
				
			||||||
		double powerPerMinute = Conf.powerPerMinute;
 | 
							double powerPerMinute = Conf.powerPerMinute;
 | 
				
			||||||
		if(Conf.scaleNegativePower && this.power < 0)
 | 
							if(Conf.scaleNegativePower && this.power < 0)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,7 +67,11 @@ public class FPlayers extends PlayerEntityCollection<FPlayer>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				// if player is faction leader, sort out the faction since he's going away
 | 
									// if player is faction leader, sort out the faction since he's going away
 | 
				
			||||||
				if (fplayer.getRole() == Rel.LEADER)
 | 
									if (fplayer.getRole() == Rel.LEADER)
 | 
				
			||||||
					fplayer.getFaction().promoteNewLeader();
 | 
									{
 | 
				
			||||||
 | 
										Faction faction = fplayer.getFaction();
 | 
				
			||||||
 | 
										if (faction != null)
 | 
				
			||||||
 | 
											fplayer.getFaction().promoteNewLeader();
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				fplayer.leave(false);
 | 
									fplayer.leave(false);
 | 
				
			||||||
				fplayer.detach();
 | 
									fplayer.detach();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,6 @@ import org.bukkit.Location;
 | 
				
			|||||||
import org.bukkit.Material;
 | 
					import org.bukkit.Material;
 | 
				
			||||||
import org.bukkit.command.CommandSender;
 | 
					import org.bukkit.command.CommandSender;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.bukkit.event.Event;
 | 
					 | 
				
			||||||
import org.bukkit.event.player.PlayerChatEvent;
 | 
					import org.bukkit.event.player.PlayerChatEvent;
 | 
				
			||||||
import org.bukkit.plugin.Plugin;
 | 
					import org.bukkit.plugin.Plugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -100,8 +99,7 @@ public class P extends MPlugin
 | 
				
			|||||||
		//setupPermissions();
 | 
							//setupPermissions();
 | 
				
			||||||
		integrateEssentialsChat();
 | 
							integrateEssentialsChat();
 | 
				
			||||||
		setupSpout(this);
 | 
							setupSpout(this);
 | 
				
			||||||
		Econ.doSetup();
 | 
							Econ.initialSetup(this);
 | 
				
			||||||
		Econ.oldMoneyDoTransfer();
 | 
					 | 
				
			||||||
		CapiFeatures.setup();
 | 
							CapiFeatures.setup();
 | 
				
			||||||
		setupLWC();
 | 
							setupLWC();
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@@ -109,44 +107,14 @@ public class P extends MPlugin
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			Worldguard.init(this);			
 | 
								Worldguard.init(this);			
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
					
 | 
				
			||||||
		// Player Events
 | 
							// Register Event Handlers
 | 
				
			||||||
		this.registerEvent(Event.Type.PLAYER_CHAT, this.playerListener, Event.Priority.Highest);
 | 
							getServer().getPluginManager().registerEvents(playerListener, this);
 | 
				
			||||||
		this.registerEvent(Event.Type.PLAYER_CHAT, this.chatEarlyListener, Event.Priority.Lowest);
 | 
							getServer().getPluginManager().registerEvents(chatEarlyListener, this);
 | 
				
			||||||
		this.registerEvent(Event.Type.PLAYER_INTERACT, this.playerListener, Event.Priority.Normal);
 | 
							getServer().getPluginManager().registerEvents(entityListener, this);
 | 
				
			||||||
		this.registerEvent(Event.Type.PLAYER_MOVE, this.playerListener, Event.Priority.Normal);
 | 
							getServer().getPluginManager().registerEvents(blockListener, this);
 | 
				
			||||||
		this.registerEvent(Event.Type.PLAYER_JOIN, this.playerListener, Event.Priority.Normal);
 | 
							getServer().getPluginManager().registerEvents(serverListener, this);
 | 
				
			||||||
		this.registerEvent(Event.Type.PLAYER_QUIT, this.playerListener, Event.Priority.Normal);
 | 
					
 | 
				
			||||||
		this.registerEvent(Event.Type.PLAYER_RESPAWN, this.playerListener, Event.Priority.High);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.PLAYER_BUCKET_EMPTY, this.playerListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.PLAYER_BUCKET_FILL, this.playerListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.PLAYER_KICK, this.playerListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		// Entity Events
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.ENDERMAN_PICKUP, this.entityListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.ENDERMAN_PLACE, this.entityListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.ENTITY_DEATH, this.entityListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.ENTITY_DAMAGE, this.entityListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.ENTITY_EXPLODE, this.entityListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.CREATURE_SPAWN, this.entityListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.ENTITY_TARGET, this.entityListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.PAINTING_BREAK, this.entityListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.PAINTING_PLACE, this.entityListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.EXPLOSION_PRIME, this.entityListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		// Block Events
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.BLOCK_BREAK, this.blockListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.BLOCK_DAMAGE, this.blockListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.BLOCK_PLACE, this.blockListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.BLOCK_PISTON_EXTEND, this.blockListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.BLOCK_PISTON_RETRACT, this.blockListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.BLOCK_SPREAD, this.blockListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.BLOCK_BURN, this.blockListener, Event.Priority.Normal);
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		// Server Events
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.PLUGIN_ENABLE, this.serverListener, Event.Priority.Monitor);
 | 
					 | 
				
			||||||
		this.registerEvent(Event.Type.PLUGIN_DISABLE, this.serverListener, Event.Priority.Monitor);
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		postEnable();
 | 
							postEnable();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,26 @@ public class Econ
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		return econ != null;
 | 
							return econ != null;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
					
 | 
				
			||||||
 | 
						public static void initialSetup(P p)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (Bukkit.getServer().getPluginManager().getPlugin("Vault") == null)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								P.p.log("Economy integration is "+(Conf.econEnabled ? "enabled, but" : "disabled, and")+" the plugin \"Vault\" is not installed.");
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							p.getServer().getScheduler().scheduleSyncDelayedTask(p, new Runnable()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								@Override
 | 
				
			||||||
 | 
								public void run()
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									doSetup();
 | 
				
			||||||
 | 
									oldMoneyDoTransfer();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}, 1);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public static void doSetup()
 | 
						public static void doSetup()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (isSetup()) return;
 | 
							if (isSetup()) return;
 | 
				
			||||||
@@ -40,6 +59,11 @@ public class Econ
 | 
				
			|||||||
		if (Bukkit.getServer().getPluginManager().getPlugin("Vault") != null)
 | 
							if (Bukkit.getServer().getPluginManager().getPlugin("Vault") != null)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			RegisteredServiceProvider<Economy> rsp = Bukkit.getServer().getServicesManager().getRegistration(Economy.class);
 | 
								RegisteredServiceProvider<Economy> rsp = Bukkit.getServer().getServicesManager().getRegistration(Economy.class);
 | 
				
			||||||
 | 
								if (rsp == null)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									P.p.log("Economy integration is "+(Conf.econEnabled ? "enabled" : "disabled")+", but the plugin \"Vault\" is not hooked into an economy plugin.");
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			econ = rsp.getProvider();
 | 
								econ = rsp.getProvider();
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
			P.p.log("Economy integration through Vault plugin successful.");
 | 
								P.p.log("Economy integration through Vault plugin successful.");
 | 
				
			||||||
@@ -47,10 +71,6 @@ public class Econ
 | 
				
			|||||||
			if ( ! Conf.econEnabled)
 | 
								if ( ! Conf.econEnabled)
 | 
				
			||||||
				P.p.log("NOTE: Economy is disabled. Enable with command: f config econEnabled true");
 | 
									P.p.log("NOTE: Economy is disabled. Enable with command: f config econEnabled true");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			P.p.log("Economy integration is "+(Conf.econEnabled ? "enabled, but" : "disabled, and")+" the plugin \"Vault\" is not installed.");
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		P.p.cmdBase.cmdHelp.updateHelp();
 | 
							P.p.cmdBase.cmdHelp.updateHelp();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,10 +4,12 @@ import org.bukkit.Location;
 | 
				
			|||||||
import org.bukkit.Material;
 | 
					import org.bukkit.Material;
 | 
				
			||||||
import org.bukkit.block.Block;
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					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.BlockBreakEvent;
 | 
				
			||||||
import org.bukkit.event.block.BlockBurnEvent;
 | 
					import org.bukkit.event.block.BlockBurnEvent;
 | 
				
			||||||
import org.bukkit.event.block.BlockDamageEvent;
 | 
					import org.bukkit.event.block.BlockDamageEvent;
 | 
				
			||||||
import org.bukkit.event.block.BlockListener;
 | 
					 | 
				
			||||||
import org.bukkit.event.block.BlockPlaceEvent;
 | 
					import org.bukkit.event.block.BlockPlaceEvent;
 | 
				
			||||||
import org.bukkit.event.block.BlockPistonExtendEvent;
 | 
					import org.bukkit.event.block.BlockPistonExtendEvent;
 | 
				
			||||||
import org.bukkit.event.block.BlockPistonRetractEvent;
 | 
					import org.bukkit.event.block.BlockPistonRetractEvent;
 | 
				
			||||||
@@ -24,7 +26,7 @@ import com.massivecraft.factions.struct.FFlag;
 | 
				
			|||||||
import com.massivecraft.factions.struct.FPerm;
 | 
					import com.massivecraft.factions.struct.FPerm;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class FactionsBlockListener extends BlockListener
 | 
					public class FactionsBlockListener implements Listener
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public P p;
 | 
						public P p;
 | 
				
			||||||
	public FactionsBlockListener(P p)
 | 
						public FactionsBlockListener(P p)
 | 
				
			||||||
@@ -32,7 +34,7 @@ public class FactionsBlockListener extends BlockListener
 | 
				
			|||||||
		this.p = p;
 | 
							this.p = p;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onBlockSpread(BlockSpreadEvent event)
 | 
						public void onBlockSpread(BlockSpreadEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -44,7 +46,7 @@ public class FactionsBlockListener extends BlockListener
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onBlockBurn(BlockBurnEvent event)
 | 
						public void onBlockBurn(BlockBurnEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -78,7 +80,7 @@ public class FactionsBlockListener extends BlockListener
 | 
				
			|||||||
		return FPerm.BUILD.has(me, loc, true);
 | 
							return FPerm.BUILD.has(me, loc, true);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onBlockPlace(BlockPlaceEvent event)
 | 
						public void onBlockPlace(BlockPlaceEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -94,17 +96,10 @@ public class FactionsBlockListener extends BlockListener
 | 
				
			|||||||
		if ( ! playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock(), "build", false))
 | 
							if ( ! playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock(), "build", false))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			event.setCancelled(true);
 | 
								event.setCancelled(true);
 | 
				
			||||||
 | 
					 | 
				
			||||||
			Material handItem = event.getPlayer().getItemInHand().getType();
 | 
					 | 
				
			||||||
			if (handItem == Material.TNT || handItem == Material.REDSTONE_TORCH_ON)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				Faction targetFaction = Board.getFactionAt(new FLocation(event.getBlock()));
 | 
					 | 
				
			||||||
				FactionsEntityListener.trackPotentialExplosionExploit(event.getPlayer().getName(), targetFaction, handItem, event.getBlock().getLocation());
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onBlockBreak(BlockBreakEvent event)
 | 
						public void onBlockBreak(BlockBreakEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -115,7 +110,7 @@ public class FactionsBlockListener extends BlockListener
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onBlockDamage(BlockDamageEvent event)
 | 
						public void onBlockDamage(BlockDamageEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -127,7 +122,7 @@ public class FactionsBlockListener extends BlockListener
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onBlockPistonExtend(BlockPistonExtendEvent event)
 | 
						public void onBlockPistonExtend(BlockPistonExtendEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -152,7 +147,7 @@ public class FactionsBlockListener extends BlockListener
 | 
				
			|||||||
		 */
 | 
							 */
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onBlockPistonRetract(BlockPistonRetractEvent event)
 | 
						public void onBlockPistonRetract(BlockPistonRetractEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// if not a sticky piston, retraction should be fine
 | 
							// if not a sticky piston, retraction should be fine
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,8 +4,10 @@ import java.util.logging.Level;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.bukkit.ChatColor;
 | 
					import org.bukkit.ChatColor;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					import org.bukkit.event.EventHandler;
 | 
				
			||||||
 | 
					import org.bukkit.event.EventPriority;
 | 
				
			||||||
 | 
					import org.bukkit.event.Listener;
 | 
				
			||||||
import org.bukkit.event.player.PlayerChatEvent;
 | 
					import org.bukkit.event.player.PlayerChatEvent;
 | 
				
			||||||
import org.bukkit.event.player.PlayerListener;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.Conf;
 | 
					import com.massivecraft.factions.Conf;
 | 
				
			||||||
import com.massivecraft.factions.FPlayer;
 | 
					import com.massivecraft.factions.FPlayer;
 | 
				
			||||||
@@ -17,7 +19,7 @@ import com.massivecraft.factions.struct.Rel;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// this is an addtional PlayerListener for handling slashless command usage and faction chat, to be set at low priority so Factions gets to them first
 | 
					// this is an addtional PlayerListener for handling slashless command usage and faction chat, to be set at low priority so Factions gets to them first
 | 
				
			||||||
public class FactionsChatEarlyListener extends PlayerListener
 | 
					public class FactionsChatEarlyListener implements Listener
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public P p;
 | 
						public P p;
 | 
				
			||||||
	public FactionsChatEarlyListener(P p)
 | 
						public FactionsChatEarlyListener(P p)
 | 
				
			||||||
@@ -25,7 +27,7 @@ public class FactionsChatEarlyListener extends PlayerListener
 | 
				
			|||||||
		this.p = p;
 | 
							this.p = p;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.LOWEST)
 | 
				
			||||||
	public void onPlayerChat(PlayerChatEvent event)
 | 
						public void onPlayerChat(PlayerChatEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,16 +1,15 @@
 | 
				
			|||||||
package com.massivecraft.factions.listeners;
 | 
					package com.massivecraft.factions.listeners;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.text.MessageFormat;
 | 
					import java.text.MessageFormat;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					 | 
				
			||||||
import java.util.logging.Level;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.Location;
 | 
					import org.bukkit.Location;
 | 
				
			||||||
import org.bukkit.Material;
 | 
					 | 
				
			||||||
import org.bukkit.block.Block;
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
import org.bukkit.entity.Entity;
 | 
					import org.bukkit.entity.Entity;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.bukkit.entity.Projectile;
 | 
					import org.bukkit.entity.Projectile;
 | 
				
			||||||
import org.bukkit.entity.TNTPrimed;
 | 
					import org.bukkit.event.EventHandler;
 | 
				
			||||||
 | 
					import org.bukkit.event.EventPriority;
 | 
				
			||||||
 | 
					import org.bukkit.event.Listener;
 | 
				
			||||||
import org.bukkit.event.entity.CreatureSpawnEvent;
 | 
					import org.bukkit.event.entity.CreatureSpawnEvent;
 | 
				
			||||||
import org.bukkit.event.entity.EndermanPickupEvent;
 | 
					import org.bukkit.event.entity.EndermanPickupEvent;
 | 
				
			||||||
import org.bukkit.event.entity.EndermanPlaceEvent;
 | 
					import org.bukkit.event.entity.EndermanPlaceEvent;
 | 
				
			||||||
@@ -18,9 +17,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
 | 
				
			|||||||
import org.bukkit.event.entity.EntityDamageEvent;
 | 
					import org.bukkit.event.entity.EntityDamageEvent;
 | 
				
			||||||
import org.bukkit.event.entity.EntityDeathEvent;
 | 
					import org.bukkit.event.entity.EntityDeathEvent;
 | 
				
			||||||
import org.bukkit.event.entity.EntityExplodeEvent;
 | 
					import org.bukkit.event.entity.EntityExplodeEvent;
 | 
				
			||||||
import org.bukkit.event.entity.EntityListener;
 | 
					 | 
				
			||||||
import org.bukkit.event.entity.EntityTargetEvent;
 | 
					import org.bukkit.event.entity.EntityTargetEvent;
 | 
				
			||||||
import org.bukkit.event.entity.ExplosionPrimeEvent;
 | 
					 | 
				
			||||||
import org.bukkit.event.painting.PaintingBreakByEntityEvent;
 | 
					import org.bukkit.event.painting.PaintingBreakByEntityEvent;
 | 
				
			||||||
import org.bukkit.event.painting.PaintingBreakEvent;
 | 
					import org.bukkit.event.painting.PaintingBreakEvent;
 | 
				
			||||||
import org.bukkit.event.painting.PaintingPlaceEvent;
 | 
					import org.bukkit.event.painting.PaintingPlaceEvent;
 | 
				
			||||||
@@ -37,7 +34,7 @@ import com.massivecraft.factions.struct.Rel;
 | 
				
			|||||||
import com.massivecraft.factions.util.MiscUtil;
 | 
					import com.massivecraft.factions.util.MiscUtil;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class FactionsEntityListener extends EntityListener
 | 
					public class FactionsEntityListener implements Listener
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public P p;
 | 
						public P p;
 | 
				
			||||||
	public FactionsEntityListener(P p)
 | 
						public FactionsEntityListener(P p)
 | 
				
			||||||
@@ -45,9 +42,7 @@ public class FactionsEntityListener extends EntityListener
 | 
				
			|||||||
		this.p = p;
 | 
							this.p = p;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private static ArrayList<PotentialExplosionExploit> exploitExplosions = new ArrayList<PotentialExplosionExploit>();
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
 | 
					 | 
				
			||||||
	@Override
 | 
					 | 
				
			||||||
	public void onEntityDeath(EntityDeathEvent event)
 | 
						public void onEntityDeath(EntityDeathEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Entity entity = event.getEntity();
 | 
							Entity entity = event.getEntity();
 | 
				
			||||||
@@ -73,7 +68,7 @@ public class FactionsEntityListener extends EntityListener
 | 
				
			|||||||
		fplayer.msg("<i>Your power is now <h>"+fplayer.getPowerRounded()+" / "+fplayer.getPowerMaxRounded());
 | 
							fplayer.msg("<i>Your power is now <h>"+fplayer.getPowerRounded()+" / "+fplayer.getPowerMaxRounded());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onEntityDamage(EntityDamageEvent event)
 | 
						public void onEntityDamage(EntityDamageEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if ( event.isCancelled()) return;
 | 
							if ( event.isCancelled()) return;
 | 
				
			||||||
@@ -94,48 +89,7 @@ public class FactionsEntityListener extends EntityListener
 | 
				
			|||||||
		}*/
 | 
							}*/
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onExplosionPrime(ExplosionPrimeEvent event)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
					 | 
				
			||||||
		if (! (event.getEntity() instanceof TNTPrimed)) return;
 | 
					 | 
				
			||||||
		if (exploitExplosions.isEmpty()) return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// make sure this isn't a TNT explosion exploit attempt
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		int locX = event.getEntity().getLocation().getBlockX();
 | 
					 | 
				
			||||||
		int locZ = event.getEntity().getLocation().getBlockZ();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		for (int i = exploitExplosions.size() - 1; i >= 0; i--)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			PotentialExplosionExploit ex = exploitExplosions.get(i);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			// remove anything from the list older than 10 seconds (TNT takes 4 seconds to trigger; provide some leeway)
 | 
					 | 
				
			||||||
			if (ex.timeMillis + 10000 < System.currentTimeMillis())
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				exploitExplosions.remove(i);
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			int absX = Math.abs(ex.X - locX);
 | 
					 | 
				
			||||||
			int absZ = Math.abs(ex.Z - locZ);
 | 
					 | 
				
			||||||
			if (absX < 5 && absZ < 5) 
 | 
					 | 
				
			||||||
			{	// it sure looks like an exploit attempt
 | 
					 | 
				
			||||||
				// let's tattle on him to everyone
 | 
					 | 
				
			||||||
				String msg = "NOTICE: Player \""+ex.playerName+"\" attempted to exploit a TNT bug in the territory of \""+ex.faction.getTag()+"\" at "+ex.X+","+ex.Z+" (X,Z) using "+ex.item.name();
 | 
					 | 
				
			||||||
				P.p.log(Level.WARNING, msg);
 | 
					 | 
				
			||||||
				for (FPlayer fplayer : FPlayers.i.getOnline())
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					fplayer.sendMessage(msg);
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				event.setCancelled(true);
 | 
					 | 
				
			||||||
				exploitExplosions.remove(i);
 | 
					 | 
				
			||||||
				return;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@Override
 | 
					 | 
				
			||||||
	public void onEntityExplode(EntityExplodeEvent event)
 | 
						public void onEntityExplode(EntityExplodeEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if ( event.isCancelled()) return;
 | 
							if ( event.isCancelled()) return;
 | 
				
			||||||
@@ -269,7 +223,7 @@ public class FactionsEntityListener extends EntityListener
 | 
				
			|||||||
		return true;
 | 
							return true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onCreatureSpawn(CreatureSpawnEvent event)
 | 
						public void onCreatureSpawn(CreatureSpawnEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -284,7 +238,7 @@ public class FactionsEntityListener extends EntityListener
 | 
				
			|||||||
		event.setCancelled(true);
 | 
							event.setCancelled(true);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onEntityTarget(EntityTargetEvent event)
 | 
						public void onEntityTarget(EntityTargetEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -304,7 +258,7 @@ public class FactionsEntityListener extends EntityListener
 | 
				
			|||||||
		event.setCancelled(true);
 | 
							event.setCancelled(true);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onPaintingBreak(PaintingBreakEvent event)
 | 
						public void onPaintingBreak(PaintingBreakEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -326,7 +280,7 @@ public class FactionsEntityListener extends EntityListener
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onPaintingPlace(PaintingPlaceEvent event)
 | 
						public void onPaintingPlace(PaintingPlaceEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -337,7 +291,7 @@ public class FactionsEntityListener extends EntityListener
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onEndermanPickup(EndermanPickupEvent event)
 | 
						public void onEndermanPickup(EndermanPickupEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -350,7 +304,7 @@ public class FactionsEntityListener extends EntityListener
 | 
				
			|||||||
		event.setCancelled(true);
 | 
							event.setCancelled(true);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onEndermanPlace(EndermanPlaceEvent event)
 | 
						public void onEndermanPlace(EndermanPlaceEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -362,38 +316,4 @@ public class FactionsEntityListener extends EntityListener
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		event.setCancelled(true);
 | 
							event.setCancelled(true);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * Since the Bukkit team still don't seem to be in any hurry to fix the problem after at least half a year,
 | 
					 | 
				
			||||||
	 * we'll track potential explosion exploits ourselves and try to prevent them
 | 
					 | 
				
			||||||
	 * For reference, canceled TNT placement next to redstone power is bugged and triggers a free explosion
 | 
					 | 
				
			||||||
	 * Same thing happens for canceled redstone torch placement next to existing TNT
 | 
					 | 
				
			||||||
	 * https://bukkit.atlassian.net/browse/BUKKIT-89
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public static void trackPotentialExplosionExploit(String playerName, Faction faction, Material item, Location location)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		exploitExplosions.add(new PotentialExplosionExploit(playerName, faction, item, location));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public static class PotentialExplosionExploit
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		public String playerName;
 | 
					 | 
				
			||||||
		public Faction faction;
 | 
					 | 
				
			||||||
		public Material item;
 | 
					 | 
				
			||||||
		public long timeMillis;
 | 
					 | 
				
			||||||
		public int X;
 | 
					 | 
				
			||||||
		public int Z;
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		public PotentialExplosionExploit(String playerName, Faction faction, Material item, Location location)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			this.playerName = playerName;
 | 
					 | 
				
			||||||
			this.faction = faction;
 | 
					 | 
				
			||||||
			this.item = item;
 | 
					 | 
				
			||||||
			this.timeMillis = System.currentTimeMillis();
 | 
					 | 
				
			||||||
			this.X = location.getBlockX();
 | 
					 | 
				
			||||||
			this.Z = location.getBlockZ();
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,16 +8,18 @@ import org.bukkit.ChatColor;
 | 
				
			|||||||
import org.bukkit.Location;
 | 
					import org.bukkit.Location;
 | 
				
			||||||
import org.bukkit.Material;
 | 
					import org.bukkit.Material;
 | 
				
			||||||
import org.bukkit.block.Block;
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
 | 
					import org.bukkit.block.BlockFace;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					import org.bukkit.event.EventHandler;
 | 
				
			||||||
 | 
					import org.bukkit.event.EventPriority;
 | 
				
			||||||
 | 
					import org.bukkit.event.Listener;
 | 
				
			||||||
import org.bukkit.event.block.Action;
 | 
					import org.bukkit.event.block.Action;
 | 
				
			||||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
 | 
					import org.bukkit.event.player.PlayerBucketEmptyEvent;
 | 
				
			||||||
import org.bukkit.event.player.PlayerBucketFillEvent;
 | 
					import org.bukkit.event.player.PlayerBucketFillEvent;
 | 
				
			||||||
import org.bukkit.event.player.PlayerChatEvent;
 | 
					import org.bukkit.event.player.PlayerChatEvent;
 | 
				
			||||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
 | 
					 | 
				
			||||||
import org.bukkit.event.player.PlayerInteractEvent;
 | 
					import org.bukkit.event.player.PlayerInteractEvent;
 | 
				
			||||||
import org.bukkit.event.player.PlayerJoinEvent;
 | 
					import org.bukkit.event.player.PlayerJoinEvent;
 | 
				
			||||||
import org.bukkit.event.player.PlayerKickEvent;
 | 
					import org.bukkit.event.player.PlayerKickEvent;
 | 
				
			||||||
import org.bukkit.event.player.PlayerListener;
 | 
					 | 
				
			||||||
import org.bukkit.event.player.PlayerMoveEvent;
 | 
					import org.bukkit.event.player.PlayerMoveEvent;
 | 
				
			||||||
import org.bukkit.event.player.PlayerQuitEvent;
 | 
					import org.bukkit.event.player.PlayerQuitEvent;
 | 
				
			||||||
import org.bukkit.event.player.PlayerRespawnEvent;
 | 
					import org.bukkit.event.player.PlayerRespawnEvent;
 | 
				
			||||||
@@ -37,7 +39,7 @@ import java.util.logging.Level;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class FactionsPlayerListener extends PlayerListener
 | 
					public class FactionsPlayerListener implements Listener
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public P p;
 | 
						public P p;
 | 
				
			||||||
	public FactionsPlayerListener(P p)
 | 
						public FactionsPlayerListener(P p)
 | 
				
			||||||
@@ -45,7 +47,7 @@ public class FactionsPlayerListener extends PlayerListener
 | 
				
			|||||||
		this.p = p;
 | 
							this.p = p;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.HIGHEST)
 | 
				
			||||||
	public void onPlayerChat(PlayerChatEvent event)
 | 
						public void onPlayerChat(PlayerChatEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -140,7 +142,7 @@ public class FactionsPlayerListener extends PlayerListener
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onPlayerJoin(PlayerJoinEvent event)
 | 
						public void onPlayerJoin(PlayerJoinEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// Make sure that all online players do have a fplayer.
 | 
							// Make sure that all online players do have a fplayer.
 | 
				
			||||||
@@ -156,7 +158,7 @@ public class FactionsPlayerListener extends PlayerListener
 | 
				
			|||||||
		SpoutFeatures.updateAppearancesShortly(event.getPlayer());
 | 
							SpoutFeatures.updateAppearancesShortly(event.getPlayer());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
    @Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
    public void onPlayerQuit(PlayerQuitEvent event)
 | 
					    public void onPlayerQuit(PlayerQuitEvent event)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
		// Make sure player's power is up to date when they log off.
 | 
							// Make sure player's power is up to date when they log off.
 | 
				
			||||||
@@ -165,7 +167,7 @@ public class FactionsPlayerListener extends PlayerListener
 | 
				
			|||||||
		SpoutFeatures.playerDisconnect(me);
 | 
							SpoutFeatures.playerDisconnect(me);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onPlayerMove(PlayerMoveEvent event)
 | 
						public void onPlayerMove(PlayerMoveEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// Did we change block?
 | 
							// Did we change block?
 | 
				
			||||||
@@ -205,7 +207,7 @@ public class FactionsPlayerListener extends PlayerListener
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
    public void onPlayerInteract(PlayerInteractEvent event)
 | 
					    public void onPlayerInteract(PlayerInteractEvent event)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -229,6 +231,25 @@ public class FactionsPlayerListener extends PlayerListener
 | 
				
			|||||||
			return;  // only interested on right-clicks for below
 | 
								return;  // only interested on right-clicks for below
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// workaround fix for new CraftBukkit 1.1-R1 bug where half-step on half-step placement doesn't trigger BlockPlaceEvent
 | 
				
			||||||
 | 
							if (
 | 
				
			||||||
 | 
									event.hasItem()
 | 
				
			||||||
 | 
									&&
 | 
				
			||||||
 | 
									event.getItem().getType() == Material.STEP
 | 
				
			||||||
 | 
									&&
 | 
				
			||||||
 | 
									block.getType() == Material.STEP
 | 
				
			||||||
 | 
									&&
 | 
				
			||||||
 | 
									event.getBlockFace() == BlockFace.UP
 | 
				
			||||||
 | 
									&&
 | 
				
			||||||
 | 
									event.getItem().getData().getData() == block.getData()
 | 
				
			||||||
 | 
									&&
 | 
				
			||||||
 | 
									! FactionsBlockListener.playerCanBuildDestroyBlock(player, block, "build", false)
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								event.setCancelled(true);
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ( ! playerCanUseItemHere(player, block.getLocation(), event.getMaterial(), false))
 | 
							if ( ! playerCanUseItemHere(player, block.getLocation(), event.getMaterial(), false))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			event.setCancelled(true);
 | 
								event.setCancelled(true);
 | 
				
			||||||
@@ -260,10 +281,13 @@ public class FactionsPlayerListener extends PlayerListener
 | 
				
			|||||||
		return true;
 | 
							return true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.HIGH)
 | 
				
			||||||
	public void onPlayerRespawn(PlayerRespawnEvent event)
 | 
						public void onPlayerRespawn(PlayerRespawnEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		FPlayer me = FPlayers.i.get(event.getPlayer());
 | 
							FPlayer me = FPlayers.i.get(event.getPlayer());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							me.getPower();  // update power, so they won't have gained any while dead
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Location home = me.getFaction().getHome(); // TODO: WARNING FOR NPE HERE THE ORIO FOR RESPAWN SHOULD BE ASSIGNABLE FROM CONFIG.
 | 
							Location home = me.getFaction().getHome(); // TODO: WARNING FOR NPE HERE THE ORIO FOR RESPAWN SHOULD BE ASSIGNABLE FROM CONFIG.
 | 
				
			||||||
		if
 | 
							if
 | 
				
			||||||
		(
 | 
							(
 | 
				
			||||||
@@ -286,7 +310,7 @@ public class FactionsPlayerListener extends PlayerListener
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// For some reason onPlayerInteract() sometimes misses bucket events depending on distance (something like 2-3 blocks away isn't detected),
 | 
						// For some reason onPlayerInteract() sometimes misses bucket events depending on distance (something like 2-3 blocks away isn't detected),
 | 
				
			||||||
	// but these separate bucket events below always fire without fail
 | 
						// but these separate bucket events below always fire without fail
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event)
 | 
						public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -300,7 +324,7 @@ public class FactionsPlayerListener extends PlayerListener
 | 
				
			|||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onPlayerBucketFill(PlayerBucketFillEvent event)
 | 
						public void onPlayerBucketFill(PlayerBucketFillEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
@@ -406,7 +430,7 @@ public class FactionsPlayerListener extends PlayerListener
 | 
				
			|||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
	public void onPlayerKick(PlayerKickEvent event)
 | 
						public void onPlayerKick(PlayerKickEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,9 @@
 | 
				
			|||||||
package com.massivecraft.factions.listeners;
 | 
					package com.massivecraft.factions.listeners;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.plugin.Plugin;
 | 
					import org.bukkit.plugin.Plugin;
 | 
				
			||||||
import org.bukkit.event.server.ServerListener;
 | 
					import org.bukkit.event.EventHandler;
 | 
				
			||||||
 | 
					import org.bukkit.event.EventPriority;
 | 
				
			||||||
 | 
					import org.bukkit.event.Listener;
 | 
				
			||||||
import org.bukkit.event.server.PluginDisableEvent;
 | 
					import org.bukkit.event.server.PluginDisableEvent;
 | 
				
			||||||
import org.bukkit.event.server.PluginEnableEvent;
 | 
					import org.bukkit.event.server.PluginEnableEvent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -9,7 +11,7 @@ import com.massivecraft.factions.P;
 | 
				
			|||||||
import com.massivecraft.factions.integration.SpoutFeatures;
 | 
					import com.massivecraft.factions.integration.SpoutFeatures;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class FactionsServerListener extends ServerListener
 | 
					public class FactionsServerListener implements Listener
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public P p;
 | 
						public P p;
 | 
				
			||||||
	public FactionsServerListener(P p)
 | 
						public FactionsServerListener(P p)
 | 
				
			||||||
@@ -17,7 +19,7 @@ public class FactionsServerListener extends ServerListener
 | 
				
			|||||||
		this.p = p;
 | 
							this.p = p;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.MONITOR)
 | 
				
			||||||
	public void onPluginDisable(PluginDisableEvent event)
 | 
						public void onPluginDisable(PluginDisableEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		String name = event.getPlugin().getDescription().getName();
 | 
							String name = event.getPlugin().getDescription().getName();
 | 
				
			||||||
@@ -27,7 +29,7 @@ public class FactionsServerListener extends ServerListener
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@EventHandler(priority = EventPriority.MONITOR)
 | 
				
			||||||
	public void onPluginEnable(PluginEnableEvent event)
 | 
						public void onPluginEnable(PluginEnableEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Plugin plug = event.getPlugin();
 | 
							Plugin plug = event.getPlugin();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user