TNT in water/lava doesn't normally destroy any surrounding blocks, which is usually desired behavior. That's the reason this setting is disabled by default. However, it is available because it provides a method to get through waterwalls with enough persistence, and it makes cheap (non-obsidian) TNT cannons require minor maintenance between shots. Both are useful things for my server.
1. Obsidian generator exploit, which converts redstone wire to obsidian. New setting "handleExploitObsidianGenerators" (enabled by default) to determine whether it's prevented or not. Some servers might want to disable this prevention, to keep it as a viable obsidian creation method. Thanks to ObGenBlocker and WorldGuard plugins for the prevention method.
2. Ender pearl exploit, which could be used to clip through doors, glass, and probably a few other things if just the right spot was targeted. New setting "handleExploitEnderPearlClipping" (enabled by default) to determine whether it's prevented or not.
Also removed our TNT exploit prevention code, since they did get it fully fixed in 1.1-R4 and it doesn't look to be coming back from the dead again like it did when they released 1.1-R2.
Added Econ.hasAtLeast(EconomyParticipator ep, double delta, String toDoThis) method to check if an account has at least a specified amount of money in it. Also added related FCommand.canAffordCommand(double cost, String toDoThis).
New setting "radiusClaimFailureLimit" (default 9). If claims are unsuccessful that many times in a row during a radius claim, the task will cancel out. There is no longer a limit to the specified radius since the process should no longer cause major server stress, and due to the process canceling out after several failures as just described.
Added some new methods to FLocation to quickly convert between block/chunk/region positions, and rewrote the FLocation hashCode() method to make it faster.
As with every other setting, you are advised to use /f config to modify it. Example: /f config playersWhoBypassAllProtection fakePluginPlayerName - add/remove the specified player name
Also switched several HashSets in Conf.java to LinkedHashSets. LinkedHashSets do have slower insertion and deletion than HashSets, but importantly they have faster lookup speed (at least until you get up to several hundred entries).
Changes:
----------
* changed internal storage of faction from String Id to Faction for LandClaimEvent and LandUnclaimEvent
* added getFactionId(), getFactionTag(), getPlayer() to LandClaimEvent
* added getFactionId(), getFactionTag(), getFPlayer(), getPlayer() to LandUnclaimEvent
* removed LandUnclaimEvent from unclaimAll() in Board.java
* created LandUnclaimAllEvent (uncancellable) and hooked into cmdUnclaimall
Notes:
--------
* LandUnclaimAllEvent currently only returns calling faction and fplayer information. Location data is unavailable as it is determined in Board.java's unclaimAll(). Realistically this should be enough information for anyone hooking this event to determine what is being altered.
On branch CustomFactionEvents
modified: src/com/massivecraft/factions/Board.java
modified: src/com/massivecraft/factions/FPlayer.java
modified: src/com/massivecraft/factions/cmd/CmdUnclaim.java
modified: src/com/massivecraft/factions/cmd/CmdUnclaimall.java
modified: src/com/massivecraft/factions/event/LandClaimEvent.java
new file: src/com/massivecraft/factions/event/LandUnclaimAllEvent.java
modified: src/com/massivecraft/factions/event/LandUnclaimEvent.java
Examples:
/f config factionFlagDefaults firespread false - set default "FIRESPREAD" faction flag to false
/f config factionFlagDefaults monsters true - set default "MONSTERS" faction flag to true
/f config factionPermDefaults build ally - for default "BUILD" faction permission, add/remove permission for allies
/f config factionPermDefaults withdraw member - for default "WITHDRAW" faction permission, add/remove permission for regular faction members
(Brettflan) Fixed slashless commands not being logged if player was in faction chat or alliance chat mode. Also cleaned up chat code a bit, nothing major.
Patrick's Custom Event System Changes:
----------------------------------------
* FPlayerLeaveEvent now fires for all faction players in cmdDisband()
* FPlayerLeaveEvent removed from cmdJoin()
* FPlayerJoinEvent now only fires when the faction is different in cmdLeade
* Added FactionRenameEvent, firing on cmdTag()
* Added FactionRelationEvent, firing on FRelationCommand extensions
* Fixed FPlayerJoinEvent to fire after tag is set in cmdCreate()
* Added getFactionId() to FactionCreateEvent
TODO:
-------
* cmdLeader() might need a FPlayerLeaveEvent for the same reason it needs
a FPlayerJoinEvent?
On branch CustomFactionEvents
modified: src/com/massivecraft/factions/cmd/CmdCreate.java
modified: src/com/massivecraft/factions/cmd/CmdDisband.java
modified: src/com/massivecraft/factions/cmd/CmdJoin.java
modified: src/com/massivecraft/factions/cmd/CmdKick.java
modified: src/com/massivecraft/factions/cmd/CmdLeader.java
modified: src/com/massivecraft/factions/cmd/CmdTag.java
modified: src/com/massivecraft/factions/cmd/FRelationCommand.java
modified: src/com/massivecraft/factions/event/FPlayerLeaveEvent.java
modified: src/com/massivecraft/factions/event/FactionCreateEvent.java
new file: src/com/massivecraft/factions/event/FactionRelationEvent.java
new file: src/com/massivecraft/factions/event/FactionRenameEvent.java
modified: src/com/massivecraft/factions/event/LandClaimEvent.java
Note that the player cannot currently already be in another faction; if they are, you'll need to /f kick them first. Also note that if the faction isn't open (with no invitation required), the player isn't invited, and you don't have the factions.join.any permission or have admin bypass mode on, the attempt will also fail.
Also, added new log method which accepts arguments (like the msg method).