From 84b6278529c6fe687c00061ed5f09093e3d00148 Mon Sep 17 00:00:00 2001 From: Brettflan Date: Sat, 28 Jan 2012 03:16:28 -0600 Subject: [PATCH] Workaround fix for half-step placement on existing half-steps not being prevented; it's caused by a CraftBukkit bug: https://bukkit.atlassian.net/browse/BUKKIT-646 Fix for a potential NPE in FPlayer autoLeaveOnInactivityRoutine. Added CaptureThePoints and CombatTag to our softdepend list so they can potentially cancel Factions commands. --- plugin.yml | 4 ++-- src/com/massivecraft/factions/FPlayers.java | 6 +++++- .../listeners/FactionsPlayerListener.java | 21 ++++++++++++++++++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/plugin.yml b/plugin.yml index 11cd7ff3..5f6a478b 100644 --- a/plugin.yml +++ b/plugin.yml @@ -1,8 +1,8 @@ name: Factions -version: 1.6.3 +version: 1.6.4_dev main: com.massivecraft.factions.P 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, CaptureThePoints, CombatTag] commands: factions: description: Reference command for Factions. diff --git a/src/com/massivecraft/factions/FPlayers.java b/src/com/massivecraft/factions/FPlayers.java index 75fdf5e8..8bb0f633 100644 --- a/src/com/massivecraft/factions/FPlayers.java +++ b/src/com/massivecraft/factions/FPlayers.java @@ -67,7 +67,11 @@ public class FPlayers extends PlayerEntityCollection // if player is faction admin, sort out the faction since he's going away if (fplayer.getRole() == Role.ADMIN) - fplayer.getFaction().promoteNewLeader(); + { + Faction faction = fplayer.getFaction(); + if (faction != null) + fplayer.getFaction().promoteNewLeader(); + } fplayer.leave(false); fplayer.detach(); diff --git a/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java b/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java index 441b660f..b8b296bc 100644 --- a/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java +++ b/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java @@ -8,12 +8,12 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerBucketFillEvent; import org.bukkit.event.player.PlayerChatEvent; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerKickEvent; @@ -326,6 +326,25 @@ public class FactionsPlayerListener extends PlayerListener 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.getLocation(), "build", false) + ) + { + event.setCancelled(true); + return; + } + if ( ! playerCanUseItemHere(player, block.getLocation(), event.getMaterial(), false)) { event.setCancelled(true);