From e429bc80202b9bdfe6a091629f86e16a44351df2 Mon Sep 17 00:00:00 2001 From: Brettflan Date: Tue, 29 Mar 2011 23:37:32 -0500 Subject: [PATCH] Initial update for RB 600... bucket use still not prevented properly yet though, needs a bit more work before release --- src/com/bukkit/mcteam/factions/Conf.java | 23 +------ src/com/bukkit/mcteam/factions/Factions.java | 10 +-- .../listeners/FactionsBlockListener.java | 64 +++++-------------- .../listeners/FactionsPlayerListener.java | 50 +++++++++++---- 4 files changed, 64 insertions(+), 83 deletions(-) diff --git a/src/com/bukkit/mcteam/factions/Conf.java b/src/com/bukkit/mcteam/factions/Conf.java index 5afb0ee4..9ba0f4fc 100644 --- a/src/com/bukkit/mcteam/factions/Conf.java +++ b/src/com/bukkit/mcteam/factions/Conf.java @@ -68,29 +68,12 @@ public class Conf { territoryProtectedMaterials.add(Material.DISPENSER); territoryProtectedMaterials.add(Material.CHEST); territoryProtectedMaterials.add(Material.FURNACE); - - territoryDenyUseageMaterials.add(Material.REDSTONE); - territoryDenyUseageMaterials.add(Material.SIGN); + territoryDenyUseageMaterials.add(Material.FLINT_AND_STEEL); - territoryDenyUseageMaterials.add(Material.BED); territoryDenyUseageMaterials.add(Material.BUCKET); territoryDenyUseageMaterials.add(Material.WATER_BUCKET); - territoryDenyUseageMaterials.add(Material.DIODE); - territoryDenyUseageMaterials.add(Material.SUGAR_CANE); - - instaDestroyMaterials.add(Material.SAPLING); - instaDestroyMaterials.add(Material.TORCH); - instaDestroyMaterials.add(Material.REDSTONE_WIRE); - instaDestroyMaterials.add(Material.CROPS); - instaDestroyMaterials.add(Material.REDSTONE_TORCH_OFF); - instaDestroyMaterials.add(Material.REDSTONE_TORCH_ON); - instaDestroyMaterials.add(Material.SUGAR_CANE_BLOCK); - instaDestroyMaterials.add(Material.DIODE_BLOCK_OFF); - instaDestroyMaterials.add(Material.DIODE_BLOCK_ON); - instaDestroyMaterials.add(Material.PAINTING); - instaDestroyMaterials.add(Material.RED_ROSE); - instaDestroyMaterials.add(Material.YELLOW_FLOWER); - + territoryDenyUseageMaterials.add(Material.LAVA_BUCKET); + safeZoneNerfedCreatureTypes.add(CreatureType.CREEPER); safeZoneNerfedCreatureTypes.add(CreatureType.GHAST); safeZoneNerfedCreatureTypes.add(CreatureType.PIG_ZOMBIE); diff --git a/src/com/bukkit/mcteam/factions/Factions.java b/src/com/bukkit/mcteam/factions/Factions.java index ee4c87bd..48225a46 100644 --- a/src/com/bukkit/mcteam/factions/Factions.java +++ b/src/com/bukkit/mcteam/factions/Factions.java @@ -136,18 +136,18 @@ public class Factions extends JavaPlugin { // Register events PluginManager pm = this.getServer().getPluginManager(); pm.registerEvent(Event.Type.PLAYER_CHAT, this.playerListener, Event.Priority.Highest, this); - pm.registerEvent(Event.Type.PLAYER_ITEM, this.playerListener, Event.Priority.Normal, this); + pm.registerEvent(Event.Type.PLAYER_INTERACT, this.playerListener, Event.Priority.Normal, this); pm.registerEvent(Event.Type.PLAYER_MOVE, this.playerListener, Event.Priority.Normal, this); pm.registerEvent(Event.Type.PLAYER_JOIN, this.playerListener, Event.Priority.Normal, this); pm.registerEvent(Event.Type.PLAYER_RESPAWN, this.playerListener, Event.Priority.High, this); pm.registerEvent(Event.Type.ENTITY_DEATH, this.entityListener, Event.Priority.Normal, this); - pm.registerEvent(Event.Type.ENTITY_DAMAGED, this.entityListener, Event.Priority.Normal, this); + pm.registerEvent(Event.Type.ENTITY_DAMAGE, this.entityListener, Event.Priority.Normal, this); pm.registerEvent(Event.Type.ENTITY_EXPLODE, this.entityListener, Event.Priority.Normal, this); pm.registerEvent(Event.Type.CREATURE_SPAWN, this.entityListener, Event.Priority.Normal, this); pm.registerEvent(Event.Type.ENTITY_TARGET, this.entityListener, Event.Priority.Normal, this); - pm.registerEvent(Event.Type.BLOCK_DAMAGED, this.blockListener, Event.Priority.Normal, this); - pm.registerEvent(Event.Type.BLOCK_PLACED, this.blockListener, Event.Priority.Normal, this); - pm.registerEvent(Event.Type.BLOCK_INTERACT, this.blockListener, Event.Priority.Normal, this); + pm.registerEvent(Event.Type.BLOCK_BREAK, this.blockListener, Event.Priority.Normal, this); + pm.registerEvent(Event.Type.BLOCK_DAMAGE, this.blockListener, Event.Priority.Normal, this); + pm.registerEvent(Event.Type.BLOCK_PLACE, this.blockListener, Event.Priority.Normal, this); // Register recurring tasks long saveTicks = 20 * 60 * 30; // Approximately every 30 min diff --git a/src/com/bukkit/mcteam/factions/listeners/FactionsBlockListener.java b/src/com/bukkit/mcteam/factions/listeners/FactionsBlockListener.java index 61cb137b..4cfee8c4 100644 --- a/src/com/bukkit/mcteam/factions/listeners/FactionsBlockListener.java +++ b/src/com/bukkit/mcteam/factions/listeners/FactionsBlockListener.java @@ -2,10 +2,9 @@ package com.bukkit.mcteam.factions.listeners; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.block.BlockDamageLevel; import org.bukkit.entity.Player; +import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockDamageEvent; -import org.bukkit.event.block.BlockInteractEvent; import org.bukkit.event.block.BlockListener; import org.bukkit.event.block.BlockPlaceEvent; @@ -24,21 +23,33 @@ public class FactionsBlockListener extends BlockListener { if (event.isCancelled()) { return; } - + if (!event.canBuild()) { + return; + } + if ( ! this.playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock(), "build")) { event.setCancelled(true); } } + @Override + public void onBlockBreak(BlockBreakEvent event) { + if (event.isCancelled()) { + return; + } + + if ( ! this.playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock(), "destroy")) { + event.setCancelled(true); + } + } + @Override public void onBlockDamage(BlockDamageEvent event) { if (event.isCancelled()) { return; } - boolean blockDestroyed = event.getDamageLevel() == BlockDamageLevel.STOPPED || Conf.instaDestroyMaterials.contains(event.getBlock().getType()); - - if (blockDestroyed && ! this.playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock(), "destroy")) { + if (event.getInstaBreak() && ! this.playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock(), "destroy")) { event.setCancelled(true); } } @@ -70,45 +81,4 @@ public class FactionsBlockListener extends BlockListener { return true; } - - @Override - public void onBlockInteract(BlockInteractEvent event) { - if (event.isCancelled()) { - return; - } - - if ( ! (event.getEntity() instanceof Player)) { - // So far mobs does not interact with the environment :P - return; - } - - Block block = event.getBlock(); - Player player = (Player) event.getEntity(); - - if ( ! canPlayerUseRightclickBlock(player, block)) { - event.setCancelled(true); - } - } - - public boolean canPlayerUseRightclickBlock(Player player, Block block) { - Material material = block.getType(); - - // We only care about some material types. - if ( ! Conf.territoryProtectedMaterials.contains(material)) { - return true; - } - - FPlayer me = FPlayer.get(player); - Faction myFaction = me.getFaction(); - Faction otherFaction = Board.getFactionAt(new FLocation(block)); - - // In safe zones you may use any block... - if (otherFaction.isNormal() && myFaction != otherFaction) { - me.sendMessage("You can't use "+TextUtil.getMaterialName(material)+" in the territory of "+otherFaction.getTag(myFaction)); - return false; - } - - // You may use doors in both safeZone and wilderness - return true; - } } diff --git a/src/com/bukkit/mcteam/factions/listeners/FactionsPlayerListener.java b/src/com/bukkit/mcteam/factions/listeners/FactionsPlayerListener.java index 946c7305..98e6e94a 100644 --- a/src/com/bukkit/mcteam/factions/listeners/FactionsPlayerListener.java +++ b/src/com/bukkit/mcteam/factions/listeners/FactionsPlayerListener.java @@ -8,9 +8,10 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerChatEvent; -import org.bukkit.event.player.PlayerEvent; -import org.bukkit.event.player.PlayerItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerListener; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerRespawnEvent; @@ -89,7 +90,7 @@ public class FactionsPlayerListener extends PlayerListener{ } @Override - public void onPlayerJoin(PlayerEvent event) { + public void onPlayerJoin(PlayerJoinEvent event) { // Make sure that all online players do have a fplayer. FPlayer me = FPlayer.get(event.getPlayer()); @@ -130,22 +131,27 @@ public class FactionsPlayerListener extends PlayerListener{ } @Override - public void onPlayerItem(PlayerItemEvent event) { + public void onPlayerInteract(PlayerInteractEvent event) { if (event.isCancelled()) { return; } - - if (event.getBlockClicked() == null) { - return; // right-clicked on air, not a block; no worries then + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) { + return; // only interested on right-clicks on blocks, whether player is using an item or interacting with a block } - if ( ! this.playerCanUseItemHere(event.getPlayer(), event.getBlockClicked(), event.getMaterial())) { + Block block = event.getClickedBlock(); + Player player = event.getPlayer(); + + if ( ! canPlayerUseRightclickBlock(player, block)) { + event.setCancelled(true); + return; + } + if ( ! this.playerCanUseItemHere(player, block, event.getMaterial())) { event.setCancelled(true); return; } - } - + public boolean playerCanUseItemHere(Player player, Block block, Material material) { if ( ! Conf.territoryDenyUseageMaterials.contains(material)) { @@ -178,7 +184,29 @@ public class FactionsPlayerListener extends PlayerListener{ return true; } - + + public boolean canPlayerUseRightclickBlock(Player player, Block block) { + Material material = block.getType(); + + // We only care about some material types. + if ( ! Conf.territoryProtectedMaterials.contains(material)) { + return true; + } + + FPlayer me = FPlayer.get(player); + Faction myFaction = me.getFaction(); + Faction otherFaction = Board.getFactionAt(new FLocation(block)); + + // In safe zones you may use any block... + if (otherFaction.isNormal() && myFaction != otherFaction) { + me.sendMessage("You can't use "+TextUtil.getMaterialName(material)+" in the territory of "+otherFaction.getTag(myFaction)); + return false; + } + + // You may use doors in both safeZone and wilderness + return true; + } + @Override public void onPlayerRespawn(PlayerRespawnEvent event) { FPlayer me = FPlayer.get(event.getPlayer());