* PlayerMoveEvent performance boost (from 0.047ms to 0.015ms in testing, ~313% as fast): now more thrifty in determining whether player has actually moved between chunks before doing anything else; important since this event triggers extremely quickly
* PlayerInteractEvent performance boost (from 0.068ms to 0.034ms in testing, ~200% as fast): now ignores left-clicks for interaction checks, since in CraftBukkit 1.4 left-clicks no longer open doors or activate buttons/levers/etc.; not as important as above, but still triggers quite often as people are digging or interacting with blocks
* "/f list" command performance boost (from 234ms to 30ms in testing, ~780% as fast): code was getting information for all factions, narrowed it down to only getting info for displayed page range
* "/f show" command performance boost (from 132ms to 28ms in testing, ~470% as fast): tweaked the ally & enemy listing code used
if the offline player had similar name with the online player
ie. online "s2", offline "s", then "s" would show as online because
getPlayer("s") will return getPlayer("s2")
this is why getPlayerExact should be used
Some further info display to go with this feature is yet to come, and further testing for possible bugs is also needed.
Related info:
New FPerm "ACCESS" which is granted to faction leaders and officers by default. This FPerm allows you to bypass access restrictions throughout your faction territory, and (along with the "factions.access" Bukkit permission below) allows you to change access settings for any chunk owned by your faction.
New permissions:
factions.access - Ability to grant territory access for your faction, if you have the proper "ACCESS" FPerm (defaults to leaders and officers only). Added to factions.kit.halfplayer permission kit.
factions.access.any - Ability to grant territory access for any faction on the server. Added to factions.kit.mod permission kit.
factions.access.view - Ability to view territory access info for your own faction. Added to factions.kit.halfplayer permission kit.
New command:
/f access [view|p|f|player|faction=view] [name=you] - view or change the access information for the chunk you are in. If "view" or nothing is specified, it will simply display the info. If "p" or "player" is specified, a player will be granted access, or removed from the list if they were already granted access. If "f" or "faction" is specified, the same will be done for the specified faction. The name defaults to yourself or your faction if not specified. If your own faction is specified, you will toggle restricted access for the chunk so that normal faction members can be denied access, unless they are in the access list.
Examples:
/f access - view access list, if in your own territory
/f access p SomePlayer - grant access to player "SomePlayer" for the current chunk, or remove them from the access list if already there
/f access f - toggle restricted access for the current chunk (since faction name isn't specified, uses your own faction), assuming you're in your own factions territory
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).
When chat event hits an UnknownFormatConversionException which requires better chat configuration, the quick dirty fix of setting chatTagInsertIndex to 0 is now automatically applied.
Now permissions are solely handled directly through Bukkit's built-in "superperms" permission system, since all modern permission plugins should be interfacing through that at this point.
New permission factions.powerboost which is required to use the above command. This permission is added to the factions.kit.mod permission kit.
example usage:
/f powerboost p Player1 1.5 (give player "Player1" a bonus of 1.5 power)
/f powerboost faction SomeFaction -6 (give faction "SomeFaction" a penalty of -6 power)
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.
Also, a minor fix for the help page regarding faction banks being shown if "bankEnabled" setting was enabled but "econEnabled" setting was false (economy as a whole disabled).
Also, a couple more minor bugfixes are included for /f home payment giving the wrong message, player/faction descriptions being wrong for console messages, and potential NPE in new faction leader promotion routine if faction was permanent with no current leader.
New permissions:
factions.leader.any - allows use of /f leader on any player in any faction
factions officer.any - allows use of /f officer on any player in any faction
factions.join.any - allows player to join any faction, bypassing invitation process for closed factions (the same as players with /f bypass enabled can do)
Now, canceled exploit attempts don't injure players or mobs as if the TNT had successfully exploded, and if it's the case of an existing TNT block which a redstone torch is attempted to be placed next to, it no longer drops a free TNT item. In that case, the existing TNT block is still destroyed itself, but... oh well, it's close enough to perfect.