Now preventing placement/use of these items inside another faction's territory: redstone wire, signs, flint&steel, beds (not detected properly by Bukkit yet), buckets (empty, water, and lava), repeaters
This commit is contained in:
		@@ -37,6 +37,7 @@ public class Factions extends JavaPlugin {
 | 
				
			|||||||
		PluginManager pm = this.getServer().getPluginManager();
 | 
							PluginManager pm = this.getServer().getPluginManager();
 | 
				
			||||||
		pm.registerEvent(Event.Type.PLAYER_CHAT, this.playerListener, Event.Priority.Highest, this);
 | 
							pm.registerEvent(Event.Type.PLAYER_CHAT, this.playerListener, Event.Priority.Highest, this);
 | 
				
			||||||
		pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, this.playerListener, Event.Priority.Normal, this);
 | 
							pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, this.playerListener, Event.Priority.Normal, this);
 | 
				
			||||||
 | 
							pm.registerEvent(Event.Type.PLAYER_ITEM, this.playerListener, Event.Priority.Normal, this);
 | 
				
			||||||
		pm.registerEvent(Event.Type.PLAYER_JOIN, this.playerListener, Event.Priority.Normal, this);
 | 
							pm.registerEvent(Event.Type.PLAYER_JOIN, this.playerListener, Event.Priority.Normal, this);
 | 
				
			||||||
		pm.registerEvent(Event.Type.PLAYER_MOVE, this.playerListener, Event.Priority.Normal, this);
 | 
							pm.registerEvent(Event.Type.PLAYER_MOVE, this.playerListener, Event.Priority.Normal, this);
 | 
				
			||||||
		pm.registerEvent(Event.Type.PLAYER_QUIT, this.playerListener, Event.Priority.Normal, this);
 | 
							pm.registerEvent(Event.Type.PLAYER_QUIT, this.playerListener, Event.Priority.Normal, this);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,9 +3,11 @@ package com.bukkit.mcteam.factions.listeners;
 | 
				
			|||||||
import java.util.*;
 | 
					import java.util.*;
 | 
				
			||||||
import java.util.logging.Logger;
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
import org.bukkit.entity.*;
 | 
					import org.bukkit.entity.*;
 | 
				
			||||||
import org.bukkit.event.player.PlayerChatEvent;
 | 
					import org.bukkit.event.player.PlayerChatEvent;
 | 
				
			||||||
import org.bukkit.event.player.PlayerEvent;
 | 
					import org.bukkit.event.player.PlayerEvent;
 | 
				
			||||||
 | 
					import org.bukkit.event.player.PlayerItemEvent;
 | 
				
			||||||
import org.bukkit.event.player.PlayerListener;
 | 
					import org.bukkit.event.player.PlayerListener;
 | 
				
			||||||
import org.bukkit.event.player.PlayerMoveEvent;
 | 
					import org.bukkit.event.player.PlayerMoveEvent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -146,5 +148,46 @@ public class FactionsPlayerListener extends PlayerListener{
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onPlayerItem(PlayerItemEvent event) {
 | 
				
			||||||
 | 
							if (event.isCancelled())
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!this.playerCanUseItemHere(event.getPlayer(), event.getBlockClicked(), event.getItem().getTypeId()))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								event.setCancelled(true);
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//currently checking placement/use of: redstone, sign, flint&steel, beds (not detected properly by Bukkit yet), buckets (empty, water, lava), repeater
 | 
				
			||||||
 | 
						private static Set<Integer> badItems = new HashSet(Arrays.asList(
 | 
				
			||||||
 | 
							 new Integer[] {331, 323, 259, 355, 325, 326, 327, 356}
 | 
				
			||||||
 | 
						));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public boolean playerCanUseItemHere(Player player, Block block, int itemId) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!badItems.contains(new Integer(itemId))) {
 | 
				
			||||||
 | 
								return true; // Item isn't one we're preventing.
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Coord coord = Coord.parseCoord(block);
 | 
				
			||||||
 | 
							Faction otherFaction = Board.get(player.getWorld()).getFactionAt(coord);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (otherFaction == null || otherFaction.id == 0) {
 | 
				
			||||||
 | 
								return true; // This is not faction territory. Use whatever you like here.
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Follower me = Follower.get(player);
 | 
				
			||||||
 | 
							Faction myFaction = me.getFaction();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Cancel if we are not in our own territory
 | 
				
			||||||
 | 
							if (myFaction != otherFaction) {
 | 
				
			||||||
 | 
								me.sendMessage(Conf.colorSystem+"You can't use that in the territory of "+otherFaction.getTag(myFaction));
 | 
				
			||||||
 | 
								return false;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user