Compare commits

..
Author SHA1 Message Date
Paul Buonopane d06fc84e41 Changed s to dropStack for verbosity, and organized imports.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 12:46:57 -05:00
Paul Buonopane 1cbb6f1617 ManagedFile was in the correct folder, but had the wrong package header.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 12:29:49 -05:00
Paul Buonopane 0039f73fb3 Better use of logger.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 12:27:23 -05:00
Paul Buonopane a865c9ad01 Formatting.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 12:26:55 -05:00
Paul Buonopane 8c5d4d83f1 Avoided shadowing.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 12:26:10 -05:00
Paul Buonopane 53c9265800 Formatting.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 12:24:46 -05:00
Paul Buonopane 9b25a25e91 Methods' applicable members are now static.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 12:21:26 -05:00
Paul Buonopane a2fdf66de4 Renamed TNT explosion listener to be more consistent with naming scheme.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 12:18:29 -05:00
Paul Buonopane 224e5f129e ChargeException was in the correct folder, but had the wrong package header.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 12:14:33 -05:00
Paul Buonopane 146599ae4b Formatting.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 12:11:09 -05:00
Paul Buonopane 4203119e9a Removed poor use of shadowing.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 12:02:55 -05:00
Paul Buonopane aefe79bbe7 Added @Override annotation in I18n.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 12:00:27 -05:00
Paul Buonopane 5da1e9a220 Increased logger efficiency in Essentials.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 11:58:43 -05:00
Paul Buonopane a0df79cc06 Removed unused imports in Essentials.
Signed-off-by: Paul Buonopane <techsoftadvanced@gmail.com>
2012-02-23 11:56:48 -05:00
snowleo 32840e68f3 Sign settings 2012-02-21 19:17:22 +01:00
snowleo 4da3f52164 Merge branch 'refs/heads/master' into 3.0
Conflicts:
	.gitignore
	Essentials/src/com/earth2me/essentials/Essentials.java
	Essentials/src/com/earth2me/essentials/EssentialsTimer.java
	Essentials/src/com/earth2me/essentials/ISettings.java
	Essentials/src/com/earth2me/essentials/Jails.java
	Essentials/src/com/earth2me/essentials/OfflinePlayer.java
	Essentials/src/com/earth2me/essentials/Settings.java
	Essentials/src/com/earth2me/essentials/User.java
	Essentials/src/com/earth2me/essentials/UserData.java
	Essentials/src/com/earth2me/essentials/UserMap.java
	Essentials/src/com/earth2me/essentials/Util.java
	Essentials/src/com/earth2me/essentials/commands/Commandnear.java
	Essentials/src/com/earth2me/essentials/commands/Commandping.java
	Essentials/src/com/earth2me/essentials/commands/Commandspawner.java
	Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java
	Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java
	Essentials/src/com/earth2me/essentials/commands/Commandtpaccept.java
	Essentials/src/com/earth2me/essentials/commands/Commandwarp.java
	Essentials/src/messages_en.properties
	Essentials2Compat/src/com/earth2me/essentials/EssentialsConf.java
	Essentials2Compat/src/com/earth2me/essentials/EssentialsUpgrade.java
	EssentialsChat/src/plugin.yml
	EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java
	EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java
	EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java
2012-02-21 18:34:53 +01:00
snowleo cf7da7a83f Merge branch 'refs/heads/groupmanager' 2012-02-21 17:34:45 +01:00
snowleo f46948249e Updated Essentials to work with R5 2012-02-21 17:33:46 +01:00
snowleo 3b81593ebb CB#1952
B#1330
2012-02-21 16:47:25 +01:00
KHobbits 514f07ce57 Add bPerm2 support for chat prefixes. 2012-02-18 22:47:38 +00:00
KHobbits 4f4d9f6209 Little bit of extra info in the default /einfo file 2012-02-18 22:08:18 +00:00
KHobbits 3077ea4ef1 Re-allow colours in newb welcome messages. 2012-02-18 21:34:05 +00:00
KHobbits 945ae71480 Adding full keyword support for newb join message.
Also adding {ADDRESS} and {USERNAME} as new keywords.
2012-02-18 21:09:18 +00:00
ElgarL 3d1c0fd157 A command of '/manload' with no world arguments now performs a full
reload of GM.
2012-02-18 09:05:28 +00:00
KHobbits fab9688abb Don't try to use old bPerms API if it is not available. 2012-02-16 23:44:13 +00:00
KHobbits b2dbb3f9e3 Fixing being charged twice for /back. 2012-02-16 16:57:50 +00:00
md_5 7633b136e3 Its a good idea to actually register the listeners 2012-02-15 19:55:41 +11:00
md_5 0252d756f6 Make Essentials Update use new Listener system, and fix a few general mistakes, including that of the config 2012-02-15 19:34:46 +11:00
md_5 ad05516fd5 Fix formatting in the config.yml and plugin.yml files. Add a new author. 2012-02-15 17:57:53 +11:00
md_5 6d127012d8 Add all the new R4 methods 2012-02-15 17:53:47 +11:00
md_5 c064da9af8 Update to 1.1-R4 2012-02-15 17:44:35 +11:00
md_5 d05f2d7a32 Remove dropItems from the inventory work around 2012-02-15 17:21:28 +11:00
ElgarL 3fc6bb4e4f comment name change 2012-02-15 06:16:33 +00:00
ElgarL 59679e0423 Depreciate PlayerTeleportEvent, PlayerRespawnEvent and PlayerPortalEvent
as it's all handled in PlayerChangedWorldEvent.
This also means we no longer update permissions before we change
worlds.
2012-02-15 06:15:31 +00:00
KHobbits f0c0ee1a8d /spawnmob - Only list mobs you have permission to spawn. 2012-02-14 23:55:29 +00:00
snowleo 3c98718387 Don't return null, throw an exception 2012-02-14 20:30:06 +01:00
snowleo cfdb2a36c1 Merge pull request #49 from Iaccidentally/patch-2
fix typo in config.yml (another one)
2012-02-14 11:21:52 -08:00
Iaccidentally 3b7d194902 fix typo in config.yml (another one) 2012-02-14 14:21:07 -05:00
snowleo 72d514d52f Merge pull request #48 from Iaccidentally/patch-1
fix typo in config.yml
2012-02-14 11:18:03 -08:00
Iaccidentally 9fe119e720 fix typo in config.yml 2012-02-14 14:16:34 -05:00
ElgarL 4a5c431163 Depreciate PlayerTeleportEvent as it's all handled in
PlayerChangedWorldEvent.
2012-02-14 13:01:39 +00:00
snowleo a6ac333a74 Less sanitizing for more performance 2012-02-13 21:32:05 +01:00
KHobbits bc2578b788 Caching regex return in user cleanup.
(Pushing this for testing purposes).
2012-02-13 19:40:33 +00:00
KHobbits effe0d5ec5 Merge remote branch 'remotes/origin/groupmanager' 2012-02-13 17:24:32 +00:00
KHobbits 0ab2e745cf Merge branch 'master' of github.com:essentials/Essentials 2012-02-13 17:17:14 +00:00
KHobbits 57a2ef08d4 Allow charges for different mob types in /spawner 2012-02-13 17:16:27 +00:00
KHobbits 2699e02f96 Add per warp command costs
Make warp other commands charge the commander, not the warped.
2012-02-13 17:09:07 +00:00
snowleo cae3c5a03e We don't need to get OfflinePlayer again. 2012-02-13 11:22:49 +01:00
md_5 13206b3418 Its a good idea to remove imports when you remove a class 2012-02-13 18:11:01 +11:00
md_5 c713be8c82 No need for that CraftBukkit hack anymore 2012-02-13 18:05:59 +11:00
md_5 62cd219b4e Clean up the CommandException stack traces so they appear as if Essentials was never there. 2012-02-12 08:19:24 +11:00
KHobbits 2d56de1483 Update trade signs properly, and visibly handle full signs. 2012-02-11 21:15:26 +00:00
KHobbits bbc6da5106 Merge pull request #46 from krinsdeath/master
Added Privileges to known Permissions plugins
2012-02-11 12:12:59 -08:00
KHobbits b0d06ce6ed Refactoring tpaccept perm check to include tpaall. 2012-02-11 20:10:19 +00:00
KHobbits de1554cb68 Merge pull request #45 from Wolvereness/master
Fix /tpaccept permission check
Refactoring to follow.
2012-02-11 12:06:42 -08:00
Jeff Wardian c890ea8f87 Added PrivilegesHandler.java;
Implemented privileges in PermissionsHandler.java;

Fixed PrivilegesHandler.canBuild();
2012-02-11 10:06:18 -08:00
ElgarL c0517c1203 Change Service registration to register WorldsHolder instead of
AnjoPermissionsHandler. This is the correct entry point for all data.
2012-02-11 10:36:55 +00:00
Wolvereness 9efd0eb6f9 Fix exploit with /tpaccept if sender no longer has permission 2012-02-09 23:14:57 -06:00
KHobbits f0ee026fb9 Allow colour codes in /ping 2012-02-09 22:13:00 +00:00
KHobbits b3fc790000 New Permission: essentials.sudo.exempt
If a user has this perm, they cannot be controlled.
2012-02-09 22:11:46 +00:00
KHobbits 83f9209bcc Optional argument to /ping [message]- Message to be echo'd.
Possible use in scripts, checking for lag, /sudo, etc.
2012-02-09 22:02:24 +00:00
KHobbits 691a0ef4ce Fixing silly typo - Fixes shout costs. 2012-02-09 02:11:36 +00:00
snowleo a3c67e23c8 Organize Imports 2012-02-06 22:26:52 +01:00
snowleo ffcdd99ad0 Cleanup 2012-02-06 22:22:05 +01:00
snowleo 539700cb21 New Groups code, supports groups.yml file, gm and vault, new economy api. 2012-02-06 22:13:39 +01:00
snowleo 1078b7b5f2 copy&paste fail 2012-02-05 18:29:37 +01:00
snowleo f908eee76c New permissions for signs 2012-02-05 18:26:21 +01:00
snowleo b95c662ed5 Finally fix tests 2012-02-05 18:02:45 +01:00
ElgarL 97bd49e598 Add some commenting 2012-02-05 16:41:34 +00:00
snowleo a60f280a1c Fixing the Testcases 2012-02-05 17:35:47 +01:00
ElgarL e93e50f6d2 Fix world mirroring so it correctly creates data files and data sources
for partially mirrored worlds.
Fixed world mirroring so it returns the correct data for the
requested world
2012-02-05 16:30:58 +00:00
snowleo 8ab5bad988 Modified BetterLocation, and new Permission-System 2012-02-05 17:19:32 +01:00
ElgarL 76ba5caeec Prevent getAllPlayersPermissions() processing a group more than once.
Improves performance when using complex inheritance structures.
2012-02-02 18:10:35 +00:00
KHobbits 86a1dda46c Make it so ops can build, even if they don't have the matching permission. 2012-02-02 10:43:17 +00:00
KHobbits 4326ce0d4a Force minimum CB version to 1846, don't want people on #1840 due to big bugs. 2012-02-02 10:32:18 +00:00
KHobbits 3ff1f4adbb Fixing repair to not repair items with datavalues, unless they actually have a durability. 2012-02-02 10:27:35 +00:00
KHobbits 492c4e8521 Craftbukkit #1846 Bukkit #1211 2012-02-02 10:27:09 +00:00
KHobbits e3f3fe84ea Recover from broken config files, but keep a backup of the old one for purpose of data recovery. 2012-02-02 09:48:56 +00:00
KHobbits 6e2ac3b56e Extend valid characters to be a little less strict. 2012-02-02 09:37:30 +00:00
KHobbits 5c19e71858 Sanitize mail for untoward characters.
Prevent a user error from terminating essentials timer task.
2012-02-02 09:26:36 +00:00
ElgarL a0103afde3 fix setGroup to only block superperms update if update is false. 2012-02-02 02:41:10 +00:00
ElgarL dbf30740fb Fix a bug with getWorldData return the main world data for all mirrors,
instead of the worlds parent data.
2012-02-02 02:01:04 +00:00
KHobbits 92fa415848 More info, and less severe warning on jail error. 2012-01-31 08:33:14 +00:00
KHobbits 2942ef40f3 Update jails to new event system. 2012-01-31 08:06:50 +00:00
ElgarL 3f02bcd702 Catch all errors in badly formatted groups. 2012-01-31 03:16:34 +00:00
ElgarL fe050dd725 Track the 'onPlayerChangeWorld' event as some teleports seem to not be
triggering a world move.
2012-01-30 17:08:55 +00:00
ElgarL 5b4966c888 Auto sort permissions on load to speed up population of superperms.
Negating a parent node after adding all nodes with * will now
correctly remove all child nodes of that parent before populating
superperms.
	  eg.
	      - '*'
	      - -vanish.*
	      - vanish.standard
2012-01-30 14:41:19 +00:00
KHobbits 8500542e93 Remove invalid item spawn blacklist warning during startup. 2012-01-29 23:36:27 +00:00
KHobbits 2f1d9ad82c Prevent /home bed, if the bed was later destroyed. 2012-01-29 21:44:15 +00:00
ElgarL 2c8aa20542 .project change for Eclipse Build tool 2012-01-29 21:37:50 +00:00
KHobbits a2418a68d9 Fixing Kill/suicide in creative mode. 2012-01-29 21:37:38 +00:00
KHobbits dff8f541fe New craftbukkit
CB 1840, B 1208
2012-01-29 21:06:55 +00:00
KHobbits d0a5656fa4 Merge remote branch 'remotes/origin/groupmanager' 2012-01-29 20:57:54 +00:00
KHobbits bc76e87366 Fix boolean fail in /r offline checking. 2012-01-29 20:57:17 +00:00
ElgarL bf9a67a2e4 updating .gitignore 2012-01-29 11:04:52 +00:00
ElgarL 95885e46c9 Fix players retaining permissions when demoted. 2012-01-29 10:54:24 +00:00
KHobbits 6a5fefb102 Optional second argument to /tpaccept, it will only accept the request if the sender matched that string. 2012-01-29 04:59:30 +00:00
KHobbits c47c008871 Added kit note.
Fixes #1276
2012-01-29 03:26:44 +00:00
KHobbits a31f5e219d Kill people the proper way.
Test #1410
2012-01-29 03:23:38 +00:00
KHobbits 9ee78bdaec Switch /near priority to check for int first.
Test #1269
2012-01-29 03:09:59 +00:00
KHobbits 735f9ce212 Make sure player is online when sending a /reply. 2012-01-29 02:57:52 +00:00
KHobbits 8f0350570e Merge remote branch 'remotes/origin/groupmanager' 2012-01-29 01:45:03 +00:00
KHobbits 27365d1f1b Prevent disabled sign creation (if any of essentials signs are enabled) 2012-01-29 01:42:55 +00:00
KHobbits ebb3a77430 Fix sign list format. 2012-01-29 01:38:24 +00:00
KHobbits b3252168f6 Disable all signs by default. 2012-01-29 01:27:04 +00:00
KHobbits e1abdbdd37 Added options to enable each sign type 2012-01-29 01:12:38 +00:00
ElgarL 3deff2afe7 silly formatting change to test gitbot 2012-01-28 18:01:17 +00:00
KHobbits 8080abacd6 More general cleanup. 2012-01-28 14:17:27 +00:00
KHobbits e960078e1a Random Cleanup 2012-01-28 14:05:50 +00:00
KHobbits f4413633b8 Clean more imports. 2012-01-28 13:48:30 +00:00
KHobbits 5c44877c4c Organize Imports 2012-01-28 13:44:06 +00:00
KHobbits 36d7907987 Fix missing import. 2012-01-28 13:40:10 +00:00
KHobbits 047f373631 Merge branch 'master' into 3.0
Conflicts:
	Essentials/src/com/earth2me/essentials/commands/Commanddelhome.java
	Essentials/src/com/earth2me/essentials/commands/Commandhome.java
	Essentials/src/com/earth2me/essentials/commands/Commandsethome.java
	Essentials/src/messages_fr.properties
	EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java
2012-01-28 13:33:09 +00:00
KHobbits c6aa34076a Merge remote branch 'remotes/origin/groupmanager' 2012-01-28 12:58:37 +00:00
ElgarL 92f83dfe73 fix for an iterator error if there is only one element in the array. 2012-01-28 11:59:54 +00:00
ElgarL 00057eaca4 Fixed a bug when pushing superperms in the wrong order. 2012-01-28 11:47:39 +00:00
KHobbits 2f96c9763f Only list bed home if it is set. 2012-01-28 01:39:51 +00:00
KHobbits 137b60c5f2 Allow space as well as : in /delhome 2012-01-28 01:32:15 +00:00
KHobbits 292b7b0546 Stop users from using /sethome bed 2012-01-28 01:09:02 +00:00
KHobbits d1d31e9769 If bed home is set, give priority when spawning. 2012-01-28 00:57:08 +00:00
KHobbits f7c6759433 Check bed still exist, for bed homes. 2012-01-28 00:49:22 +00:00
KHobbits 5137502646 Switch website URL's to point at wiki. 2012-01-28 00:20:46 +00:00
ElgarL 9ff8b69282 Properly fix inherited negated nodes. 2012-01-27 13:09:11 +00:00
ElgarL 7f269187c5 do not allow inherited permissions to negate higher perms. 2012-01-27 12:38:00 +00:00
KHobbits 6d34a2aa17 Merge branch 'master' of github.com:essentials/Essentials 2012-01-26 21:21:35 +00:00
KHobbits 9b58b2b9c0 Revert emergency listener to old style
Stops peoples world world burning down if they throw in 2.8, on a 1.0 server.
2012-01-26 21:21:13 +00:00
snowleo 8aa260ee34 Minor fix to french translation 2012-01-26 04:49:26 +01:00
Léa Gris 25976edc2b i18n added to command nuke 2012-01-26 04:46:00 +01:00
Léa Gris 8e9094a3ef Updated translations to Essentials Dev2.7.191 2012-01-26 04:45:16 +01:00
KHobbits b8944d0b25 Set min bukkit to 1818 - RB 2012-01-26 00:30:33 +00:00
KHobbits 69209eeb2f Merge remote branch 'remotes/origin/groupmanager' 2012-01-26 00:28:10 +00:00
KHobbits 72ed86e0dd Tidy chat. 2012-01-26 00:01:49 +00:00
KHobbits c689b55c4d Fix depends 2012-01-25 23:56:54 +00:00
ElgarL 746eb353a2 Fixed an infinite loop error when using '/manudel' on a logged in
player. It caused setDefaultGroup to trigger a bukkit update when no GM
User existed yet.
2012-01-25 23:44:14 +00:00
ElgarL 3708f2b3bb Trap errors in fetching the mirrors map. 2012-01-25 22:43:07 +00:00
ElgarL e563405a7d Check for a null player object in the PlayerTeleportEvent. 2012-01-25 22:35:24 +00:00
ElgarL ae2cf3d95c Fixed subgroups (I broke earlier). 2012-01-25 22:33:22 +00:00
paul.aston 324dd05c97 CB #1818
RB #1200
2012-01-25 14:23:46 +00:00
Paul A. 2a0c3eebbc Merge pull request #43 from essentials/groupmanager
Fix trying to modify an unmodifiable collection breaking superperms.
2012-01-24 17:29:08 -08:00
ElgarL e1660d47ba Fix trying to modify an unmodifiable collection breaking superperms. 2012-01-25 01:20:44 +00:00
ementalo cbee61093e Fix exception when getting displayname
Fix exception if null values are in settings groups.yml
2012-01-25 01:09:32 +00:00
KHobbits da3a6af92d Merge remote branch 'remotes/origin/groupmanager' 2012-01-25 00:02:15 +00:00
KHobbits df061749dd 2nd sweep over Essentials Chat, to implement 2.8 changes.
Formatting cache still needs reimplemented.
2012-01-24 23:20:00 +00:00
KHobbits 38a9327284 Merge branch '3.0' of github.com:essentials/Essentials into 3.0
Conflicts:
	Essentials/src/messages_en.properties
2012-01-24 22:56:53 +00:00
ementalo 307c6c7bf0 remove merge leftovers
Don't try to spawn users who have disconnected before we have a chance to spawn them
2012-01-24 22:50:34 +00:00
ementalo 593cb8d56e Don't try to spawn users who have disconnected before we have a chance to spawn them 2012-01-24 22:43:33 +00:00
KHobbits bdc695c85b First sweep over Essentials Chat, to implement 2.8 changes.
Formatting cache still needs reimplemented.
2012-01-24 22:08:20 +00:00
KHobbits 8c54f37092 Fix messages file 2012-01-24 20:47:11 +00:00
ElgarL f40f5f880b Fix typo/wording in changelog
Allow negation to the * permission node when populating superperms.
2012-01-24 19:41:22 +00:00
ElgarL 8390594682 Allow negations with the * permission node when population superperms. 2012-01-24 19:38:22 +00:00
ElgarL a13740f638 Fix hasOwnData to return a correct result with new mirroring system 2012-01-24 15:37:21 +00:00
ElgarL 5f19cbf17b Fixed isInList 2012-01-24 15:35:20 +00:00
ElgarL 145b0be2f3 addSubGroup now returns a boolean for success/failure.
'/manuaddsub' now correctly reports if it was able to add the sub
group.
2012-01-24 14:21:07 +00:00
ElgarL 1dab4f95dd Added recursive loop detection for World mirroring (you may not set the
main world as a mirror of another).
Fixed fetching world data so it no longer returns the mirrored world
for groups. Each world data holder now points to the correct data set,
so can be returned as an object.
2012-01-24 14:08:53 +00:00
snowleo 0ea41d9169 Merge branch 'refs/heads/groupmanager' 2012-01-24 03:43:17 +01:00
snowleo cc0e9aa84b Merge branch 'refs/heads/master' into 3.0
The changes to EssChat have not been merged

Conflicts:
	Essentials/src/com/earth2me/essentials/Essentials.java
	Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java
	Essentials/src/com/earth2me/essentials/ISettings.java
	Essentials/src/com/earth2me/essentials/OfflinePlayer.java
	Essentials/src/com/earth2me/essentials/Settings.java
	Essentials/src/com/earth2me/essentials/Util.java
	Essentials/src/com/earth2me/essentials/listener/EssentialsBlockListener.java
	Essentials/src/com/earth2me/essentials/listener/EssentialsPlayerListener.java
	Essentials/src/com/earth2me/essentials/listener/EssentialsPluginListener.java
	Essentials/src/messages.properties
	Essentials/src/messages_da.properties
	Essentials/src/messages_de.properties
	Essentials/src/messages_en.properties
	Essentials/src/messages_es.properties
	Essentials/src/messages_fr.properties
	Essentials/src/messages_nl.properties
	EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChat.java
	EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java
	EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerHighest.java
	EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java
	EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java
	EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java
	EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java
	EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java
	EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java
	EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectPlayerListener.java
	EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawn.java
	EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java
	EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPPPlayerListener.java
2012-01-24 00:52:08 +01:00
snowleo 6af054631f More work on 3.0 branch 2012-01-24 00:01:31 +01:00
ementalo 01a37df700 Add new permission essentials.protect.alerts.notrigger
If user has this permisson they do not trigger EssProtect block alerts
Fix spawnmob sign command args
2012-01-23 16:00:23 +00:00
ementalo f93769dd1d Add new permission essentials.protect.alerts.notrigger
If user has this permisson they do not trigger EssProtect block alerts
2012-01-23 15:48:56 +00:00
ElgarL 125ea7c701 Fixed infinite loop error on player join.
Optimized code to only update the player logging in instead of all
players online.
2012-01-22 23:46:26 +00:00
ElgarL 6e03ea7b7d Separated all events to be independent classes. 2012-01-21 20:18:40 +00:00
ElgarL 9041596384 Fixed a random null error upon a player portaling. 2012-01-21 19:09:08 +00:00
ElgarL 4b61ac9043 Update to new Bukkit Event system.
Update GroupManagerBridge for new event system.
2012-01-21 11:47:08 +00:00
KHobbits 72edfacfb8 Catching throwable leads to madness, lets do this safely. 2012-01-21 00:19:13 +00:00
KHobbits aa88205d95 Catch errors too, incase the class doesn't exist. 2012-01-21 00:01:43 +00:00
KHobbits 8d441a4cc7 Messages Cleanup 2012-01-20 23:13:37 +00:00
KHobbits 766935871f If vault throws an exception, it should not be enabled. 2012-01-20 23:04:43 +00:00
KHobbits f5d65371b2 Adding translation keys for [L] and [Spy] 2012-01-20 22:57:35 +00:00
KHobbits 662749be8b Check shout/question messages are longer than 1 character. 2012-01-20 22:54:47 +00:00
snowleo e46fe381b4 Removing load info, bucket displays that now. 2012-01-20 05:52:35 +01:00
snowleo 04a43eb5d0 New Event code for EssentialsSpawn 2012-01-20 05:34:28 +01:00
snowleo 792f70efa5 Update for new CraftBukkit Event Code
EssentialsSpawn can't be updated yet, because the new event system lacks dynamic priorities.
2012-01-20 05:20:37 +01:00
snowleo 46298ae858 CB#1791 2012-01-20 04:09:35 +01:00
KHobbits d08b1a5089 Fix EssChat displayname error. 2012-01-19 15:51:55 +00:00
KHobbits e015cad131 Merge remote branch 'remotes/origin/groupmanager' 2012-01-19 15:34:00 +00:00
KHobbits 008f0d595f Fix Lombok include. 2012-01-19 15:08:37 +00:00
ElgarL 7ee3919175 Fixed text when adding a subgroup to not say the player was moved. 2012-01-19 13:08:57 +00:00
snowleo 2560bdca4a Update of Lombok, fixes memory leak in Netbeans 2012-01-19 13:17:05 +01:00
ElgarL 16d537bd6c Remove debug spam 2012-01-19 12:08:39 +00:00
snowleo 5f04d1867c Cache MessageFormats for Chat 2012-01-19 02:03:20 +01:00
KHobbits a10f6850e5 Compiled regex is faster. 2012-01-18 23:35:30 +00:00
KHobbits 36bc1adf83 Make sure to clean the chatStore. 2012-01-18 23:08:40 +00:00
KHobbits cd8cc63113 Reduce duplicate calls in EssentialsChat
Should cut the time down a little.
2012-01-18 22:53:39 +00:00
KHobbits 947bee98a0 Merge remote branch 'remotes/origin/groupmanager' 2012-01-18 20:04:50 +00:00
ElgarL 9c052b5178 Better optimize assembling of a players permissions and allow the * node
to populate all registered superperms.
2012-01-18 16:39:12 +00:00
snowleo f0dd81ee00 Merge branch 'refs/heads/master' into 3.0
Did some tweaks, so that it actually works.

Conflicts:
	Essentials/src/com/earth2me/essentials/Essentials.java
	Essentials/src/com/earth2me/essentials/User.java
	Essentials/src/com/earth2me/essentials/Util.java
	Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java
	Essentials/src/com/earth2me/essentials/commands/Commanditemdb.java
	Essentials/src/com/earth2me/essentials/commands/Commandmail.java
	Essentials/src/com/earth2me/essentials/commands/Commandme.java
	Essentials/src/com/earth2me/essentials/commands/Commandmsg.java
	Essentials/src/com/earth2me/essentials/commands/Commandnick.java
	Essentials/src/com/earth2me/essentials/commands/Commandr.java
	Essentials/src/com/earth2me/essentials/listener/EssentialsPlayerListener.java
	EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java
	EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java
	EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java
	EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawn.java
	EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java
	build.xml
2012-01-18 04:01:01 +01:00
ElgarL 64af5b465d Added a tidy error message for invalid permission entries in
GlobalGroups.
2012-01-18 01:25:25 +00:00
KHobbits 5c1d49fd0e Merge remote branch 'remotes/origin/groupmanager' 2012-01-17 23:50:05 +00:00
KHobbits 79a13e97a2 Merge remote branch 'remotes/origin/groupmanager' 2012-01-17 23:49:38 +00:00
KHobbits 27b0cc86de Don't charge a user if warp already exists (and they can't set it). 2012-01-17 19:25:56 +00:00
ElgarL 89c41b0508 v 1.9:
Optimize populating Bukkit perms so we no longer calculate the
child
nodes (Bukkit already does this).
2012-01-17 18:03:16 +00:00
KHobbits ee88abafcf Merge branch '3.0' of github.com:essentials/Essentials into 3.0 2012-01-17 17:41:16 +00:00
KHobbits e7fd26ee64 Merge branch 'master' of github.com:essentials/Essentials 2012-01-17 17:40:22 +00:00
KHobbits 8fc6684290 Auto Update GM Version 2012-01-17 17:24:22 +00:00
KHobbits a1cf08d6ab Auto update gm version. 2012-01-17 17:23:27 +00:00
ementalo 42e9e105cb Adding permissions for overwriting exisitng warps
essentials.warp.overwrite.[warpname] will allow overwrting of exsiting warps
Adding WarpNotFoundException class
For ticket #
2012-01-17 16:19:53 +00:00
KHobbits ec0d6651b0 Removing 2 dead classes. 2012-01-17 03:13:44 +00:00
snowleo a66ffd8921 Shorter names for enchantment signs. 2012-01-17 01:45:03 +01:00
KHobbits 1f2c669eca Stripping vanilla colour from /helpop and /mail
Adding support for &k in EssChat
Adding support for colour in /msg and /r - New perm: essentials.msg.color
2012-01-16 20:25:36 +00:00
KHobbits 1d5a09a03e Merge branch 'master' of github.com:essentials/Essentials 2012-01-16 19:42:37 +00:00
KHobbits 4435121c84 Stripping vanilla colours from /msg 2012-01-16 19:42:15 +00:00
snowleo 813e66b4f2 Fix /nick command colors 2012-01-16 20:38:53 +01:00
snowleo 26d63f3666 Strip colors from chat, if the user does not have the permission. 2012-01-16 20:29:55 +01:00
KHobbits 0fb07d4cc1 Removing debugging message from player login. 2012-01-16 18:58:44 +00:00
snowleo cd2f819c29 Cleanup 2012-01-16 19:11:41 +01:00
KHobbits 149ce7d74d Adding support for Vault as a fallback economy method. 2012-01-16 18:00:43 +00:00
snowleo f26cccb663 Optimize TextInput to cache motd and info textfiles. 2012-01-16 04:51:27 +01:00
snowleo 81ec87d893 Revert changes to Usermap 2012-01-16 02:12:20 +01:00
snowleo 91563e9dca Optimize Break in Protect 2012-01-16 01:55:04 +01:00
snowleo 359ea194b8 Speed improvements for Move and Interact Event. 2012-01-16 00:50:52 +01:00
ElgarL 1a0b03db4d Removed '- bukkit.command' form the globalgroups permission nodes. 2012-01-15 01:43:42 +00:00
snowleo c860b1c668 Reload less 2012-01-14 23:25:52 +01:00
snowleo c584d74852 Temporary fix for Spawns and Jails when Worlds are loaded after Essentials.
This will be replaced by BetterLocation fix in 3.0 branch.
2012-01-14 23:13:58 +01:00
KHobbits 6e82419c15 Allowing use of aliases in help/info/motd, for command suggestions.
Test #1441
2012-01-14 16:53:18 +00:00
KHobbits 3f6b9586b4 Fixing double charges on /home
Test #1426
2012-01-14 16:42:53 +00:00
KHobbits 29d4e09983 Fixing {WorldDate}
Test #1353
2012-01-14 16:36:19 +00:00
KHobbits f0def90301 Merge remote branch 'remotes/origin/groupmanager' 2012-01-14 15:52:22 +00:00
ElgarL d0e5685ac0 Catch NullPointerErrors generated by blank permission nodes. 2012-01-14 15:48:55 +00:00
KHobbits 856cef3286 Update Essentials/src/com/earth2me/essentials/commands/Commanditemdb.java 2012-01-14 15:04:16 +00:00
KHobbits 43f1c0f89d Removing debugging messages. 2012-01-13 22:50:48 +00:00
KHobbits 256d202d50 Adjusting default spawn behavior.
Moving option in config file.
2012-01-13 22:41:47 +00:00
snowleo 4884bed117 Merge branch 'refs/heads/groupmanager' 2012-01-13 01:38:54 +01:00
snowleo 348bb6d0a3 Merge branch 'refs/heads/master' into 3.0 2012-01-13 00:23:39 +01:00
snowleo 3fdde2f764 Add new eggs to items.csv 2012-01-12 23:56:39 +01:00
snowleo 390b17f0d8 Min Bukkit version is 1713 now 2012-01-12 23:43:11 +01:00
snowleo fe9d5645f6 Added the new Enchantments 2012-01-12 23:42:04 +01:00
snowleo eb5c88ef08 Netbeans 7.1 stuff 2012-01-12 23:37:39 +01:00
snowleo 6eea852b1d CB#1713 B#1136 2012-01-12 23:36:45 +01:00
snowleo 64904cdcfd Create Files, if they don't exist 2012-01-12 16:34:52 +01:00
snowleo 69d57b04d9 ItemDb now loads in half the time, uses 72KB less memory. 2012-01-12 16:33:55 +01:00
ElgarL 768c92e5bf Major, MAJOR changes to support partial/full world mirroring.
You can now mirror groups.yml, users.yml or both files between
different worlds.
2012-01-11 05:51:40 +00:00
snowleo ef659d5f26 Better Location code for lazy loading worlds
This fixes problems with worlds that are loaded after the Location object is created and should prevent memory leaks when a world is unloaded.
2012-01-11 04:36:57 +01:00
ElgarL 2a478fe03d Optimize fetching of Mirrored world data. 2012-01-10 18:40:34 +00:00
snowleo 703c5741bd Essentials should run now... 2012-01-10 01:02:23 +01:00
snowleo d64c73fc51 Finished Protect, Essentials should build now. 2012-01-10 00:36:09 +01:00
snowleo 92abba0f25 All tests should work now 2012-01-09 23:27:52 +01:00
ElgarL 58057a771d Changed over to a reflection method for populating superperms as Bukkit
lags when you handle permissions one at a time.
2012-01-09 02:00:58 +00:00
snowleo cc3cd5e89c Cleanup of Console class 2012-01-06 01:55:41 +01:00
ElgarL 4c485f3147 Fix 'manucheckp' to correctly report if a permission is available from
GroupManager or Bukkit.
2012-01-05 19:43:30 +00:00
KHobbits 3513d72a7b Fixing Warp, Spawnmob signs
Fix Imports
2012-01-04 21:41:05 +00:00
KHobbits 8432e1fc7d Fixing kit and protect signs (inGroup)
Fix imports
2012-01-04 21:37:00 +00:00
KHobbits a46f6fd73d Revert "Possible sign refactor?"
This reverts commit 897571db7d.
2012-01-04 18:56:36 +00:00
KHobbits 897571db7d Possible sign refactor? 2012-01-04 18:34:37 +00:00
KHobbits de0a419476 Cleaning up item spawning and kits. 2012-01-04 17:51:14 +00:00
ementalo 6dd73f5247 ReadLock for realname
Remove unneeded overrides
Redo Khobbits messages_de changes
2012-01-04 15:53:59 +00:00
ementalo a50cfb3efb 3.0 updates - Main jar should build now 2012-01-04 15:06:10 +00:00
ementalo bbcf2ecce3 Fix a few things for 3.0
Test #843 - new config option added cancelTpRequestsOnWorldChange
Test # 1255 - essentials.nogod.override permission added
Test #1311 - added ban reason in /seen
2012-01-04 11:57:00 +00:00
snowleo 86ea654a5d Cleanup of Backup class 2012-01-04 05:45:32 +01:00
KHobbits d2bbbd14fc Organize Imports 2012-01-04 03:45:26 +00:00
KHobbits a5398e938c final is cleaner. 2012-01-04 03:37:47 +00:00
KHobbits 7b01bc894d Readlocks maybe... 2012-01-04 03:27:25 +00:00
KHobbits 2678be90e3 Fixing up kits. 2012-01-04 03:12:21 +00:00
snowleo 781f42fba1 More fixes for commands 2012-01-03 21:43:57 +01:00
ElgarL 7726fd0081 Reload GlobalGroups when you perform a world load.
Changed GlobalGroups to save/load before local groups in the
scheduled data saving/loading
2012-01-03 02:04:48 +00:00
snowleo 481749b119 New names 2012-01-03 02:57:44 +01:00
snowleo a552b88172 I always forget these 2012-01-03 02:53:57 +01:00
snowleo 801562ac2c More work on Protect 2012-01-03 02:51:19 +01:00
snowleo 869d79ae73 This feels so good D: 2012-01-03 01:53:38 +01:00
snowleo 7153676137 Starting to break Protect 2012-01-03 00:07:44 +01:00
snowleo d2c1b24e4b Prototype for grouping permissions into an enum 2012-01-02 23:45:50 +01:00
snowleo b3de4276bc Those are permission based now 2012-01-02 23:35:36 +01:00
snowleo cb31939a7a New Protect config 2012-01-02 23:25:17 +01:00
snowleo 41e0e64a5f EssentialsSpawn and EssentialsChat should build now again 2012-01-02 22:38:47 +01:00
snowleo a20e96af4e Netbeans 7.1 RC2 project stuff 2012-01-02 22:37:44 +01:00
snowleo cedf363557 Merge branch 'refs/heads/master' into 3.0 2012-01-02 20:29:00 +01:00
snowleo 9a568992f1 Merge pull request #42 from jjkoletar/patch-1
No sending to all players, must specify target.
2012-01-01 16:38:05 -08:00
Jeremy 283dc9b3c1 No sending to all players, must specify target. 2012-01-01 18:18:29 -06:00
ElgarL 3aba996e97 Changed the way events are raised to prevent variable corruption. 2011-12-29 14:52:42 +00:00
snowleo 9bb6d77bdb More work done on the 3.0 branch 2011-12-23 12:57:26 +01:00
snowleo 03171616fa Merge branch 'refs/heads/master' into 3.0
Conflicts:
	Essentials/src/com/earth2me/essentials/Essentials.java
2011-12-22 23:37:12 +01:00
ElgarL 69847af08a Decreased ranks of default users so idiots who don't remove them can't
get 'hacked' when in offline mode.
2011-12-22 17:01:10 +00:00
ElgarL debcf4714a Delayed GroupManager events so Superperms will be fully updated before
plugins receive the events.
2011-12-20 17:21:55 +00:00
snowleo 791e8f2d14 Only info not a warning if a file is missing 2011-12-20 12:24:59 +01:00
snowleo 5d4f22ad84 Correctly match release and non release versions of bukkit. 2011-12-20 12:20:12 +01:00
snowleo 31e80ba698 Fix sending our player object to other plugins. 2011-12-20 11:57:22 +01:00
ElgarL a2202439bb Expanded GlobalGroups.yml and Groups.yml to include Towny permissions. 2011-12-19 19:22:04 +00:00
ElgarL 7c8c40c790 manpromote and mandemote now correctly sent the notification to the
console if the command was issued there.
2011-12-19 15:44:27 +00:00
snowleo abd86347c7 Always return an offlineplayer object with the name, that the user wants. 2011-12-19 12:57:09 +01:00
snowleo 5bb7d82fca Fix double names in /balancetop and show display name in balancetop 2011-12-19 12:39:23 +01:00
KHobbits 5a092f0e99 Merge branch 'master' of github.com:essentials/Essentials 2011-12-19 10:57:44 +00:00
KHobbits 98cd03ac57 Prevent future warps being named as numbers. 2011-12-19 10:57:18 +00:00
snowleo 8761feb93f More null checks for Jails 2011-12-19 11:53:52 +01:00
ElgarL afe8ecd3df Fixed a typo 2011-12-18 15:21:56 +00:00
ElgarL 244673e1fb Fixed manucheckp on group (missed it in last commit) 2011-12-18 14:35:14 +00:00
ElgarL de40f7f556 Fixed 'manucheckp' returning a null for the searched node when it's a
group/subgroup.
2011-12-18 14:26:00 +00:00
KHobbits 087a594449 Removing duplicate messages file
This causes confusion when trying to override messages in the ess folder.
2011-12-18 11:52:49 +00:00
KHobbits c0b78cc3d5 Adding /join as alias to /tpa, and /come as alias to /tpahere 2011-12-18 04:30:00 +00:00
ElgarL ac77bbb0b4 Changed ServicesManager registration to lowest from normal. 2011-12-18 04:25:54 +00:00
KHobbits b05e4079d9 Essentials now throws a custom event, to handle local chat.
(Changing event name, so we don't get custom event conflicts.)
2011-12-17 17:57:57 +00:00
KHobbits 556c990eff EssentialsChat cleaning. 2011-12-17 17:40:47 +00:00
KHobbits 618f58c3f3 Merge branch 'master' into 3.0 2011-12-15 20:47:59 +00:00
KHobbits fec3b61039 Merge branch 'master' of github.com:essentials/Essentials 2011-12-15 20:47:24 +00:00
KHobbits 01530192cf Make powertool use a chat event, instead of just messaging each user. 2011-12-15 20:47:06 +00:00
snowleo a7e71488c6 Merge branch 'refs/heads/master' into 3.0 2011-12-15 10:32:56 +01:00
snowleo 64bc8d1133 Corrected version match for 1597 build version 2011-12-15 10:32:04 +01:00
ElgarL 815a9dcca2 Removed op permissions from admins in the default GloblaGroups.yml. 2011-12-14 16:24:47 +00:00
snowleo 0155bcedb7 Updated all modules to new api, some settings are still missing 2011-12-14 16:31:08 +01:00
snowleo 9ab2fe54fc Added EssentialsSigns to build.xml 2011-12-14 16:05:35 +01:00
snowleo 0f1eb9b4f9 Moved signs code to a new module 2011-12-14 16:04:15 +01:00
snowleo 503e837cfd Fail merge :D 2011-12-14 15:22:29 +01:00
snowleo 0a98b8f662 Merge branch 'refs/heads/master' into 3.0
Conflicts:
	Essentials/src/com/earth2me/essentials/Essentials.java
	Essentials/src/com/earth2me/essentials/IUser.java
	Essentials/src/com/earth2me/essentials/Trade.java
	Essentials/src/com/earth2me/essentials/User.java
2011-12-14 15:20:22 +01:00
snowleo 58bebd851c Fix failing override for /enchant /eco /ext 2011-12-14 15:07:08 +01:00
snowleo 9eaebadaaa Merge branch 'refs/heads/groupmanager' 2011-12-14 10:03:32 +01:00
ElgarL 8d29a2c578 deleting the contents of GlobalGroups.yml will no longer thrown a
NullPointerException.
2011-12-14 04:26:02 +00:00
KHobbits 2202448cee Read current exp, instead of stored exp.
This means that exp used in enchanting is subtracted from total exp.
2011-12-14 03:41:24 +00:00
snowleo 79861b1f10 Merge branch 'refs/heads/groupmanager' 2011-12-13 23:52:25 +01:00
ElgarL 559400c606 GM now registers with Bukkits ServicesManager. 2011-12-13 18:20:02 +00:00
ElgarL 5b195299ba Update event Action names to be unique 2011-12-13 17:32:39 +00:00
ElgarL 759892078a Added custom events so plugins can now be notified of changes within
GroupManager.
2011-12-13 17:13:53 +00:00
KHobbits 505460349f Fixing killall command definition. 2011-12-13 09:38:20 +00:00
snowleo 70bd9bd1f3 Renamed /butcher to /killall and fixes to the code. 2011-12-13 10:28:15 +01:00
snowleo 32564fb4f7 Netbeans 7.1 changes for EssentialsUpdate 2011-12-13 08:46:50 +01:00
snowleo af4dde2086 Tiny fix to the last commit. 2011-12-13 08:41:28 +01:00
snowleo 15ce04b539 Better exp fix and allow exp on buy and sell signs. 2011-12-13 08:38:15 +01:00
snowleo 907f6c6116 Disabling exp as currency. Normal money will be used. 2011-12-13 07:35:46 +01:00
KHobbits fc1ccda0fe Update exp trade signs on purchase. 2011-12-13 04:52:09 +00:00
KHobbits d3dd8208ef Fixing Sell/Buy Signs which use EXP as a currency. 2011-12-13 04:29:16 +00:00
KHobbits a00f070400 Merge branch 'master' of github.com:essentials/Essentials 2011-12-13 03:12:09 +00:00
KHobbits faddbd09a4 Update copylibs. 2011-12-13 03:11:11 +00:00
KHobbits dfa4ecbe4f Inform user that they were healed. 2011-12-13 01:47:58 +00:00
KHobbits e37ab86c9b Updating min Bukkit version. 2011-12-12 23:13:39 +00:00
KHobbits f936cd5f27 Updating to RB
CraftBukkit #1597 Bukkit #1073
2011-12-12 23:00:21 +00:00
KHobbits 46840a686d Merge remote branch 'remotes/origin/groupmanager'
Adjusting bukkit paths to remove version number.
2011-12-12 22:51:18 +00:00
KHobbits 5f3d783e21 Update Bukkit jars and paths. 2011-12-12 22:45:59 +00:00
snowleo 6e79302908 More work done. 2011-12-12 22:31:19 +01:00
ElgarL 0e0b441168 Offline player checks now support partial name matches. 2011-12-12 16:39:15 +00:00
ElgarL aaf08150e6 Fix classpath for Eclipse 2011-12-12 15:59:34 +00:00
ElgarL 50f215adda Dev Jar files for GM 2011-12-12 15:56:00 +00:00
ElgarL 4b43453a74 Update GM version to 1.7
GM now supports offline players without having to mantogglevalidate
Added craftbukkit-1.0.0-SNAPSHOT.jar to lib (version 1587)
Added bukkit-1.0.0-R1-SNAPSHOT.jar to lib (version 1065)
Updated GM XML's to build using dev bukkit/CB build jars.
2011-12-12 15:53:33 +00:00
KHobbits 3eff598791 Merge branch 'master' of github.com:essentials/Essentials 2011-12-12 00:49:33 +00:00
KHobbits a7b1c3d534 Switching the item value of brewing stands 2011-12-12 00:48:39 +00:00
snowleo ecf72e27bb More work done 2011-12-11 13:16:36 +01:00
snowleo d1aea7dd35 Merge branch 'refs/heads/master' into 3.0
Conflicts:
	Essentials/src/com/earth2me/essentials/Util.java
2011-12-11 09:25:33 +01:00
snowleo f8e1f02523 Fix sorting of users in /who 2011-12-11 09:22:27 +01:00
snowleo b2a307ec23 Merge branch 'refs/heads/master' into 3.0 2011-12-11 08:56:53 +01:00
KHobbits a63c116590 Temp Fix wildcard permissions in bperms. 2011-12-11 06:00:29 +00:00
KHobbits fad38170a8 Make the version error messages stand out a little more... 2011-12-11 05:49:25 +00:00
KHobbits aa5f819d7b Added cleanup note
Minecraft server usually shows players around 140-180 range, so changing default /near to 200.
2011-12-10 04:12:22 +00:00
snowleo f0dabdd4b1 Re-Implemented User class 2011-12-10 03:04:10 +01:00
KHobbits f9905f9953 Make the alt command message, sound less negative/broken. 2011-12-09 22:53:36 +00:00
KHobbits 06c2453941 Update plugin information. 2011-12-09 21:51:31 +00:00
KHobbits c0e903c1f3 New permissions: essentials.powertool.append. 2011-12-09 21:42:36 +00:00
KHobbits f99867dd0a Simplify the protect config file examples. 2011-12-09 04:07:53 +00:00
snowleo de12c5c6d1 Fix broken charge for shout and question 2011-12-09 02:48:57 +01:00
ementalo 95d5217f58 Allow timeout of /tpa /tpahere requests
Adds new config setting tpa-accept-cancellation
Test #781
2011-12-08 23:43:09 +00:00
KHobbits 52b1017bda Merge branch 'master' of github.com:essentials/Essentials 2011-12-08 04:44:34 +00:00
KHobbits b102c5f3d8 First Refactor of Kits
New sign: [Kit] / <kit name> / [group] / [charge]
2011-12-08 04:44:18 +00:00
snowleo e379ac5d77 Merge branch 'refs/heads/groupmanager' 2011-12-08 04:14:27 +01:00
ElgarL 789a6b9540 Fix manload to properly clone user variables. 2011-12-08 02:28:12 +00:00
KHobbits 221e1d3bb2 Merge branch 'master' of github.com:essentials/Essentials 2011-12-08 02:23:18 +00:00
KHobbits 9410a25cce Adjusting /spawn to not trigger respawn event. 2011-12-08 02:21:10 +00:00
snowleo ae7d968f5c Fix for Towny using an old method. 2011-12-08 02:23:44 +01:00
snowleo 5002e7a6ad Prevent blockdamage by enderdragon (default true) in EssentialsProtect CB#1566 B#1058 2011-12-08 00:48:53 +01:00
snowleo 13a42d1937 Fix Jails not loaded after server start. 2011-12-07 16:50:16 +01:00
snowleo 46c99e5c6f /home sends the player to bed again before it tries to respawn. 2011-12-07 15:18:50 +01:00
snowleo 02b25120e8 Allow to set the Respawn priority in config. 2011-12-07 15:09:22 +01:00
snowleo 435219bab6 Fix Enchant sign, the user has to hold the item in hand now. A * or "any" in the second line allows to enchant all possible items. 2011-12-07 14:23:56 +01:00
snowleo 766f0a9f13 Use of our Inventory code in enchant sign to be reliable. 2011-12-07 13:44:51 +01:00
snowleo d60de76d87 New config option disable-item-pickup-while-afk, defaults to true. 2011-12-07 12:10:41 +01:00
snowleo 324cd74826 Banned moved from /whois to /seen 2011-12-07 12:00:01 +01:00
snowleo e7ebc94a9e SnakeYaml now ignores additional mapping values in files, so it throws less errors. 2011-12-07 11:57:31 +01:00
snowleo 5c02346f85 Fix I18n file not loading from Essentials folder, when the locale is not defined in config. 2011-12-07 11:22:02 +01:00
snowleo 5b539bf034 Fix /mail sendall, fixes #1209 2011-12-07 11:02:10 +01:00
snowleo 879d4913dc /balancetop now has pages instead of max argument
Test #1210
2011-12-07 10:53:06 +01:00
snowleo ef49d92c49 Null check in new player teleport, fixes #1212 2011-12-07 10:37:34 +01:00
snowleo 719539d63b Missing translation for last commit 2011-12-07 10:35:06 +01:00
snowleo fdd8fffbb3 Support for experience as trading goods on signs. This will not work until experience is fixed in Bukkit. 2011-12-07 10:31:18 +01:00
snowleo 67a3a55f5a Updated /near and /getpos command, added new argument playername
Test #1214
2011-12-07 10:03:23 +01:00
Khyperia e8eb1974b8 New feature: IsBanned to /whois 2011-12-07 09:36:11 +08:00
Khyperia a82d8d1d44 Added new player argument: /spawnmob <mob> [amount] [player]
Test: #821
2011-12-07 09:36:11 +08:00
ementalo 9ca0e51dac Merge branch 'master' of github.com:essentials/Essentials 2011-12-07 01:13:08 +00:00
ementalo 10597cec2f Catch TeleportClause.COMMAND in the teleport listener.
Changed Teleport methods to pass a TeleportClause param
2011-12-07 01:12:36 +00:00
Khyperia b49a9ef165 New feature: /mail sendall <message>
Test: #649
2011-12-07 08:53:15 +08:00
Khyperia d573671933 Renamed /find to /itemdb 2011-12-07 08:53:14 +08:00
Khyperia a0d66ce230 New command: /find <item>
Test #278
Test #293
Test #348
2011-12-07 08:53:14 +08:00
snowleo 854fc05c5b Fix serious bug in Dev2.7.137 - Dev2.7.144: if spawn.yml is not present, the server will run into a deadlock. 2011-12-07 00:08:45 +01:00
ementalo b9077d91a5 Adding ability to save /back location from teleport events outside essentilals
New config setting to turn this on "register-back-in-listener"
Test #1200
CB#1560 / B#1055
2011-12-06 22:56:38 +00:00
snowleo ff13279e6c Fixing color in announce-format 2011-12-06 22:02:19 +01:00
snowleo ce3a7c8719 This is no longer needed 2011-12-06 17:44:02 +01:00
snowleo 9e1571a8e5 More cleanup 2011-12-06 17:42:55 +01:00
snowleo d2953c99ef Added /jail /ejail alias to plugin.yml 2011-12-06 17:31:35 +01:00
snowleo 72e187cd5c Updated Jails to use the new config classes 2011-12-06 17:28:48 +01:00
snowleo 2851a4634c cleanup 2011-12-06 16:35:30 +01:00
snowleo 58237a796a New Interfaces in api package (WIP) 2011-12-06 16:32:06 +01:00
snowleo 5433a68502 UserBase is abstract 2011-12-06 15:40:35 +01:00
snowleo a7097df231 Refactoring to create less redundant code 2011-12-06 15:38:14 +01:00
snowleo 51390a9698 Prevent some rare cases of NPE and Deadlocks, better error handling on yaml load 2011-12-06 14:39:52 +01:00
snowleo 019b49ef11 Updated EssentialsSpawn to use the new config code
/spawn and /home now call the PlayerRespawnEvent to make it more compatible with other plugins.
2011-12-06 13:41:29 +01:00
snowleo f3b278eac2 More work done on config code 2011-12-06 10:37:17 +01:00
snowleo 6fe8e603af Using the correct type of Set in UserMap. 2011-12-06 08:28:41 +01:00
snowleo 6b06adfc23 Check if the item can be enchanted. 2011-12-05 00:20:46 +01:00
Khyperia 2b919faa7b Added {VERSION} to motd
Test #1198
2011-12-05 06:56:20 +08:00
snowleo b2ffdc9774 utf8 encoding 2011-12-04 23:39:08 +01:00
snowleo e5aa7f496b Merge remote-tracking branch 'dysp/patch-1'
Conflicts:
	Essentials/src/messages_da.properties
2011-12-04 23:37:01 +01:00
snowleo cb89fe5358 Readded because of popular demand: default-stack-size for /give and /item, values below 1 return max stack size (or oversized stack size). 2011-12-04 23:21:30 +01:00
snowleo ad60eb538e Ignore teleport cooldown on /tjail 2011-12-04 22:57:40 +01:00
snowleo cbc744c85a Added missing steps to items.csv (by andrewkm from ecocitycraft.com) 2011-12-04 22:53:29 +01:00
snowleo 6371a59819 Fix some rare cases, where adding an item to inventory could result in an infinite loop. 2011-12-04 22:45:47 +01:00
snowleo 20bc8840d6 Allow oversized stacks in kits. 2011-12-04 22:33:49 +01:00
snowleo f12e9f6dfb Enchantements are now stored in one class 2011-12-04 22:28:29 +01:00
snowleo c8814bd70e Added missing [player] to plugin.yml 2011-12-04 22:10:20 +01:00
snowleo 8417c5e1f0 New permission essentials.spawn.others 2011-12-04 22:09:36 +01:00
snowleo ec3586c08c Added null check to /break 2011-12-04 22:06:03 +01:00
snowleo d9c773270b Less use of sqrt 2011-12-04 22:01:50 +01:00
snowleo dd84f5c331 Merge pull request #35 from khyperia/master
Multiple commits from khyperia
2011-12-04 12:49:52 -08:00
Khyperia 2c2f956068 Added [enchant] sign
Test #1177
2011-12-04 14:58:00 -05:00
Khyperia ba3ccf7a2c Added /spawn <player>
Test #607
2011-12-03 20:24:35 -05:00
KHobbits 90f87804b1 Show command conflict in debug mode. 2011-12-03 23:38:28 +00:00
KHobbits ea21e402ec Sort translation files properly. 2011-12-03 21:18:15 +00:00
KHobbits 1066f7a478 New Permission: essentials.world.<worldname>
~ Unsure about the future of this feature, its recommended you don't rely on /world to switch worlds ~
Test #1178
2011-12-03 21:15:53 +00:00
KHobbits 1c03cdb4d0 New command /remove
Test #1193
2011-12-03 21:14:03 +00:00
KHobbits 6d3e1b862e New command: /feed New permission: essentials.feed.others
Test #1191
2011-12-03 20:54:53 +00:00
KHobbits d4c2443b5f New command: /more
Test #1189
2011-12-03 20:44:44 +00:00
KHobbits 8ce8764f6a New Command /break, and new Permission: essentials.break.bedrock
Test #1188
2011-12-03 20:41:24 +00:00
KHobbits 343618642b Merge pull request #34 from khyperia/master 2011-12-03 12:36:38 -08:00
Khyperia 1cb593dba3 Added per-world permissions for /world 2011-12-03 12:13:42 -05:00
Khyperia 85d743dce5 Merge commit 2011-12-03 11:14:53 -05:00
KHobbits 118b3638eb Small cleanup to checkActivity 2011-12-03 13:50:32 +00:00
Khyperia dc74239edc Fixed accedental typo 2011-12-02 20:55:43 -05:00
Dysp 647eac32fc The last translation was so poorly done (I suspect the use of google-translate) that I decided to translate it myself. There may be errors due to lack of insigt for the context of the individual sentence. I can easily correct these, if I am notified. 2011-12-03 01:05:12 +01:00
Khyperia 91be153474 Added some commands from request 946 2011-12-02 19:02:12 -05:00
KHobbits b03a327f9b Patching gamemode and god toggles to not match on ' ' 2011-12-02 21:32:32 +00:00
KHobbits 3b2403b686 items.csv update for crackedstonebrick (id98,2) 2011-12-02 09:28:57 +00:00
KHobbits 16e3830f9e Remove invalid dupe permission from permbukkit example. 2011-12-02 09:23:23 +00:00
KHobbits 73ec9978fb Make the chat formatting config file link to the wiki. 2011-12-02 09:17:20 +00:00
snowleo 055f11c89e Missing language files for last commit 2011-12-02 08:34:28 +01:00
snowleo 1489203aca New config options repair-enchanted (default true) and permission essentials.repair.enchanted 2011-12-02 08:30:52 +01:00
snowleo 1f1b6aff54 Allows to be teleported to bed location of offline players.
Also adds missing return in /home command
2011-12-02 08:19:55 +01:00
snowleo 8d4d8effa0 Null check 2011-12-02 03:27:37 +01:00
snowleo 8591023ad5 Moved block to item conversion to Util class 2011-12-02 03:25:22 +01:00
snowleo 42f4bba320 Added new tags to info.txt 2011-12-02 02:01:48 +01:00
Khyperia 746c80b0d6 Added many new MOTD possibilities + getI18n() to Essentials.java 2011-12-02 08:42:48 +08:00
Khyperia bbb47fe6d3 Added {DATE} and {TIME} to motd 2011-12-02 08:42:48 +08:00
Khyperia 4c1c3e4852 Added many new MOTD possibilities + getI18n() to Essentials.java 2011-12-01 19:37:12 -05:00
KHobbits 3b0c604de0 Missing command aliases. 2011-12-01 17:32:48 +00:00
KHobbits 7a80a36eab Missing aliases 2011-12-01 17:25:46 +00:00
KHobbits 83a4431bd7 CB#1538 b#1050 2011-12-01 16:20:53 +00:00
KHobbits c0eec02f0a Show how far away each player is. 2011-12-01 15:58:25 +00:00
KHobbits c97d069783 Fixing near output. 2011-12-01 15:31:53 +00:00
KHobbits b0377498f7 Better distance checking. 2011-12-01 15:15:45 +00:00
KHobbits 00d44873ca Command: /near 2011-12-01 14:43:16 +00:00
KHobbits 2a8ccb43ae Fixing spawnmob errors to say the right thing. 2011-12-01 14:43:00 +00:00
KHobbits f006932639 Merge branch 'master' of github.com:essentials/Essentials
Conflicts:
	Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
	Essentials/src/com/earth2me/essentials/commands/Commandenchant.java
2011-12-01 13:47:06 +00:00
KHobbits 2dc6f8c202 Command Cleanup 2011-12-01 13:42:39 +00:00
snowleo 39851694ad minor changes to items.csv 2011-12-01 04:46:43 +01:00
snowleo 737f7799fc Updated items.csv by michaelwm from ecocitycraft.com 2011-12-01 04:39:51 +01:00
Khyperia 8356624479 Added {DATE} and {TIME} to motd 2011-11-30 21:02:57 -05:00
Khyperia dde8595c51 Updating to latest 2011-11-30 20:30:21 -05:00
snowleo 909e5bd3f8 Update of Smack to 3.2.1 2011-12-01 02:11:40 +01:00
snowleo e6e1c7d160 We don't need them anymore. 2011-12-01 01:56:39 +01:00
snowleo a5f4ada85d This is obsolete too. 2011-12-01 01:41:09 +01:00
snowleo 4f8be31343 Cleanup of the library folder
Also: we don't use the mysql.jar/sqlite.jar anymore, since it is included in craftbukkit. I don't know why this reference in config.yml still exists.
2011-12-01 01:35:48 +01:00
snowleo 40220960f5 We don't need that anymore. 2011-11-30 23:51:41 +01:00
snowleo 3c9f0db3d4 CB#1534 B#1048 2011-11-30 22:59:50 +01:00
snowleo bd7bd86e62 Allow EssentialsProtect to go into emergency mode, if Essentials core is not present at all. 2011-11-30 21:25:11 +01:00
snowleo 5e2123c91e If Essentials core fails to read one of the configs now, it will disable itself. If other modules detect that Essentials is not enabled, they will be disabled too. EssentialsProtect will go into emergency mode, canceling all events that could hurt your world. Fix the file and either restart or reload the server. 2011-11-30 20:49:11 +01:00
snowleo 15d8ec6026 Removed EnchantmentFix, because it's fixed in CB#1526 2011-11-30 20:49:11 +01:00
KHobbits a8a9fc3dd6 /spawnmob sheep:<colour> + /spawnmob sheep:baby = /spawnmob sheep:<colour>baby.
And as a nice extra, random: /spawnmob sheep:randombaby 10
2011-11-30 03:58:20 +00:00
KHobbits 1de4a40bf6 Missing an Animal. 2011-11-30 03:44:33 +00:00
snowleo 35f5578436 New config option update-bed-at-daytime that allows players to always set their bed location 2011-11-30 02:51:02 +01:00
snowleo b8d60674cb Updated readme about format guidelines. 2011-11-30 00:54:44 +01:00
snowleo a30a28265a Removing old settings.zip 2011-11-30 00:52:55 +01:00
snowleo f5344b65d3 Fix /balancetop, cache was not cleared 2011-11-30 00:48:51 +01:00
snowleo e169e954ba Merge branch 'refs/heads/groupmanager' 2011-11-29 21:38:00 +01:00
snowleo 5f0936cf44 mirror world_the_end in default config.yml 2011-11-29 21:34:31 +01:00
snowleo aed160b5fc Using this code until Bukkit fixes spawnCreature() 2011-11-29 19:24:54 +01:00
snowleo 0b2a3fcf7f Output the redirected plugin too. 2011-11-29 18:48:52 +01:00
snowleo 57a0ec9912 Allow joinList to understand Collections. 2011-11-29 18:40:13 +01:00
KHobbits e5435f24db Merge branch 'master' of github.com:essentials/Essentials 2011-11-29 17:21:46 +00:00
KHobbits af7eae6201 Adding some debug info to /essentials 2011-11-29 17:21:18 +00:00
snowleo 60067964be Fix NPE in getUser() 2011-11-29 17:39:22 +01:00
KHobbits cdbae1631d Settings Cleanup. 2011-11-29 16:16:45 +00:00
KHobbits 414d6b79e9 GC: Never force reclaiming RAM on user logout, it will be done automatically, when the time is right.
~ Should reduce player event lag a little bit ~
2011-11-29 16:06:39 +00:00
KHobbits dd3b1e97b6 Merge branch 'master' of github.com:essentials/Essentials 2011-11-29 13:10:19 +00:00
KHobbits 0c81a68c7b Handle a null handler (GM) 2011-11-29 13:10:00 +00:00
snowleo 183343c388 1TBS? Nope, Allman
This reverts commit a36b755248.
2011-11-29 05:06:07 +01:00
snowleo a36b755248 New format guidelines? 2011-11-29 04:51:29 +01:00
ElgarL 1838dbc931 globalgroups prefix 'g:' is now not case sensitive. 2011-11-29 02:32:09 +00:00
snowleo 525fefc484 UserMap.getUser() will return null on failure. 2011-11-29 00:36:36 +01:00
snowleo 4bacdb327a Fix NPE when reading old player files 2011-11-29 00:30:06 +01:00
snowleo 91cdff955a Fix another bug in /sell 2011-11-28 22:41:26 +01:00
snowleo 8c06b13a77 Allow to set size of MagmaCubes in /spawnmob 2011-11-28 22:06:59 +01:00
snowleo 7db7fd4136 Added info how to read the next page to /info /help /motd /rules 2011-11-28 20:52:15 +01:00
snowleo 5e24584bf7 Fix bug in /sell command 2011-11-28 20:24:13 +01:00
snowleo 9acc7db06f Changes to /sell /give and /item
Material.getMaxStackSize() will now be used in /give and /item
The config option default-stack-size has been removed
New config option oversized-stacksize and permission essentials.oversizedstacks
Fixes bug giving out too many items on /give and /item when a stacksize > 64 is given.
Fixes bug in /sell that ignores enchantments
/sell now uses Material.getMaxStackSize() for /sell egg 2s (will sell 32 instead of 128 now)
2011-11-28 19:55:51 +01:00
snowleo 0354b8d019 Translation of /balancetop 2011-11-28 18:59:33 +01:00
snowleo eea7785b7f Calculation of /balancetop is now async to prevent slowdown of the server 2011-11-28 18:53:38 +01:00
snowleo 7268e1965d Ignore defaultstacksize from config, just use 64 2011-11-28 17:58:26 +01:00
KHobbits 4614d6d0dd Merge branch 'master' of github.com:essentials/Essentials 2011-11-28 12:56:20 +00:00
KHobbits 4a83d17fec Adding extra mobs to essentials protect, changing some default settings. 2011-11-28 12:55:54 +00:00
snowleo e8d64aca5e New option for EssProtect: Prevent villager death. 2011-11-28 06:15:51 +01:00
snowleo b637e494c2 Forgot this again. :D 2011-11-28 04:15:09 +01:00
KHobbits ccfc3b8d78 Someone said something about wanting Snowmen.
... and MagmaCubes.
Bukkit #1045 CraftBukkit #1522
2011-11-28 03:12:37 +00:00
KHobbits 05c90af1ee Fix empty argument in delhome. 2011-11-28 02:54:19 +00:00
snowleo 6603d0997e Fix broken trade/buy signs because of a wrong cast 2011-11-27 22:36:32 +01:00
snowleo aceda4c680 Allow enchantments to be removed using /enchant enchantmentname 0 2011-11-27 20:40:39 +01:00
snowleo 67be976d90 New permissions:
essentials.spawnmob.[mobname] and essentials.spawner.[mobname]
2011-11-27 19:59:06 +01:00
snowleo ec6baa3621 Catch exception instead of checking for null 2011-11-27 19:13:55 +01:00
snowleo 82f864a7f9 Update Essentials/src/messages_fr.properties 2011-11-27 18:56:04 +01:00
snowleo 2a22c04688 Merge pull request #32 from leagris/patch-1
Up to date, more accurate french translation.
2011-11-27 09:55:33 -08:00
Léa Gris 1c6c460a09 Up to date, more accurate french translation. 2011-11-27 17:52:12 +01:00
snowleo c5251591de Allow /unbanip playername, not just ips 2011-11-27 16:58:47 +01:00
snowleo ccb4d3a7e8 Don't add the internal bukkit names to the enchantment list, to make it shorter. 2011-11-27 11:43:42 +01:00
snowleo d5db9d404a Revert to the old behavior of oversized stacks. We might remove or change this in the future. 2011-11-27 10:59:28 +01:00
snowleo 0c0c9573be Updated the enchantment names to match those of the game 2011-11-27 10:48:10 +01:00
snowleo 76a8f794ef Enchantments in CraftBukkit are still broken, but it works with Essentials :) 2011-11-27 10:02:41 +01:00
snowleo cbba3639b9 Fix Typo 2011-11-27 09:09:04 +01:00
snowleo 8791a8dbb7 Only print stack trace of motd.txt not found, if debug is on. 2011-11-27 09:07:15 +01:00
snowleo 098072517a Added enchantment to /give and /item
Updated plugin.yml
2011-11-27 08:57:21 +01:00
snowleo b8f9a4b96f Implement correct hashCode() and equals() in EnchantmentLevel 2011-11-27 08:26:52 +01:00
snowleo 9c56b147ee Enchantment Multiplier in future Worth config 2011-11-27 08:18:41 +01:00
snowleo 41e8c4c7b8 Enchantments on Trade signs? Fixes check, so we won't add items that are enchanted. 2011-11-27 07:47:16 +01:00
snowleo a8a72da15e Added 1.9 material where you can stand 2011-11-27 07:33:03 +01:00
snowleo 9b6c01d071 /spawner without mobname outputs available mobs 2011-11-27 07:32:42 +01:00
snowleo 3c71ae4cd9 Locale.ENGLISH!!1! 2011-11-27 06:23:07 +01:00
snowleo 34edf34ba3 Using the ItemStack.clone() method 2011-11-27 06:10:11 +01:00
snowleo f250a107e4 CB#1518 B#1042
Support for Enchantments & Removed broken BedFix (in cb now)
2011-11-27 06:01:41 +01:00
KHobbits d5c852b79d URL went nowhere. 2011-11-27 04:54:48 +00:00
snowleo 65776d6ed2 BedLocationFix for CraftBukkit 2011-11-27 04:46:33 +01:00
snowleo 0234c55ce3 New command /enchant
Permissions for each enchantment: essentials.enchant.[enchantmentname]
For all use *
2011-11-27 04:36:42 +01:00
KHobbits ee42030307 Merge remote branch 'remotes/origin/groupmanager' 2011-11-27 03:16:32 +00:00
ElgarL 263a3fc80b Added file details in error messages for loading groups/users. 2011-11-27 03:12:28 +00:00
snowleo a714e39bf4 CB#1512 B#1039 2011-11-27 03:22:39 +01:00
KHobbits 68297b5cf8 Merge branch 'master' of github.com:essentials/Essentials 2011-11-27 01:15:39 +00:00
KHobbits ae4c10ced6 Fixing optional argument on tppos to use the correct yaw value. 2011-11-27 01:15:14 +00:00
snowleo b5e9ad02ae arrrgggss 2011-11-27 00:31:14 +01:00
snowleo c70700f7b8 Fix banning random player (and all other commands where a empty player is given) 2011-11-27 00:23:40 +01:00
snowleo b21b7b7e15 New behavior of the /home command and beds
- The behavior has been altered to match the vanilla server.
 - Using a bed will no longer create a home in the users file, if config option bed-sethome is set
 - The config option bed-sethome has been removed
 - It's now possible to go to /home bed or /home playername:bed
 - Bed locations stored before installing Essentials will be used
 - Players respawn at their bed location (if set) instead of the spawn, if respawn-at-home is set to false
 - The default value of spawn-if-no-home is set to true
 - If spawn-if-no-home is set and the player has not set a home, he will be either teleported to his bed location (if set) or the spawn, when he uses the /home command
2011-11-26 22:30:40 +01:00
snowleo f9d14697b6 Forgot to save this file before commit 2011-11-26 17:37:07 +01:00
snowleo 8ed4418d5f Translated /list command 2011-11-26 15:26:48 +01:00
snowleo 4ad19b6fad Cleanup 2011-11-26 00:34:36 +01:00
snowleo d4685d1d10 Fix ItemDupe bug in bukkit 2011-11-25 22:26:06 +01:00
snowleo fa73394113 Merge branch 'refs/heads/groupmanager' 2011-11-25 21:12:38 +01:00
ElgarL b25a8f059b Optimizations include changing the return of comparePermissionString. 2011-11-25 19:33:32 +00:00
ElgarL 0cb77d8a03 Minor optimization for groups 2011-11-25 16:34:34 +00:00
ElgarL b41c3709ba Raised bukkit perms priority 2011-11-25 16:01:46 +00:00
ElgarL 24a6073488 Fix superperms to pass all tests
http://dev.bukkit.org/server-mods/superpermstest/
2011-11-25 15:49:35 +00:00
snowleo 3daf56c8be Another safety check 2011-11-25 14:02:40 +01:00
snowleo 223028f306 Fix another NPE in AlternativeCommandsHandler 2011-11-25 13:55:09 +01:00
snowleo 7afbad3218 This config option is never read 2011-11-25 13:03:07 +01:00
snowleo 871c0e6b6a Disable god mode automatically in worlds defined by config 2011-11-25 07:12:21 +01:00
snowleo 73d13f5748 Oh no! Angry wolf babies D: 2011-11-25 06:04:19 +01:00
snowleo 03452bda68 Baby wolfs, awwwwh 2011-11-25 05:54:32 +01:00
snowleo 613cb57fdb CB#1501 B#1037
New spawnmob options: cow:baby sheep:baby chicken:baby pig:baby
2011-11-25 05:49:57 +01:00
snowleo 31b9e792bd Fix NPE in AlternativeCommandsHandler on shutdown 2011-11-25 00:22:57 +01:00
ElgarL cd8ef9361b minimal optimizations 2011-11-24 16:45:57 +00:00
ElgarL eea381e714 optimize getPermissionList 2011-11-24 16:34:05 +00:00
ElgarL 5a9b573309 More optimization (charAt(0)) 2011-11-24 16:05:41 +00:00
ElgarL 70c235d4f0 remove unused imports. 2011-11-24 16:00:46 +00:00
ElgarL 127681736d rewrite of comparePermissionString (snowleo) 2011-11-24 15:57:21 +00:00
ElgarL 73a7a6a1dd Optimize comparePermissionString 2011-11-24 15:28:32 +00:00
ElgarL dec7ea1926 remove bukkit perms check from checkUserPermission as it's performed in
checkFullUserPermission
2011-11-24 14:05:25 +00:00
ElgarL 94983c3ca7 Optimize sorting to speedup permission tests. 2011-11-24 13:26:30 +00:00
snowleo 32e43bf167 Show more then 9 lines of motd on login 2011-11-24 05:57:01 +01:00
KHobbits af456a73dd New permission essentials.nick.color
Allows control over who can use colour codes in nicknames.
2011-11-23 22:24:31 +00:00
snowleo b35d5f30f9 Invert pattern 2011-11-23 02:52:08 +01:00
snowleo 8aaaed2ef8 More work on the config code 2011-11-23 02:43:38 +01:00
snowleo e683ce5751 Merge branch 'refs/heads/groupmanager' 2011-11-22 15:12:20 +01:00
snowleo b0aaafd08d GM does not need CraftBukkit 2011-11-22 06:02:47 +01:00
KHobbits 212442ab1c Fixing inventory method calls.
Bug report: http://pastie.org/2901587
2011-11-22 04:55:21 +00:00
KHobbits bf244fff80 Switching priority on help permissions
Bukkit #1488
2011-11-22 04:41:34 +00:00
KHobbits 2620e2ae08 Merge branch 'master' of github.com:essentials/Essentials 2011-11-22 04:00:26 +00:00
KHobbits d59e2834d1 Rewriting help, to use new classes. 2011-11-22 04:00:04 +00:00
snowleo 63991cb38d Moved all dependency on craftbukkit to one package in the main jar. The rest is now clean bukkit code. Also cleaned PlayerExtension class. 2011-11-22 03:02:08 +01:00
snowleo 94b70e1ee9 Corrected name in items.csv: whitestone => enderstone 2011-11-22 02:25:56 +01:00
ElgarL fd1c2824ce Stop throwing errors on an empty users file. 2011-11-21 09:51:31 +00:00
snowleo a5853baf4c Set shooter of Fireball or it will die instantly. 2011-11-21 03:50:31 +01:00
snowleo 90694b15cc Added new creatures to EssProtect prevent spawning
Ghast and Slime default value changed
2011-11-21 03:21:02 +01:00
snowleo 5e4b7f85c8 Cleanup 2011-11-21 03:07:44 +01:00
snowleo b5bc83e714 Fixing the tests 2011-11-21 03:05:18 +01:00
snowleo 220d68f375 Switch to the new I18n class and format cleanup of all classes 2011-11-21 02:55:26 +01:00
snowleo 19f5a2340d Fix timeWorldCurrent translation key in /time command 2011-11-20 19:12:20 +01:00
snowleo 1e4a54baca Prevent NPE with creatures that are not added to bucket yet. 2011-11-20 16:50:08 +01:00
snowleo 14cc499421 Fix long prefix breaking setPlayerListName(), because they are too long.
If Essentials detects, that the player name would be too long with prefix and suffix to fit in the player list, it will only update the name without prefix and suffix but with nickname and opcolor.
2011-11-20 16:43:38 +01:00
snowleo 6633b39954 Fix Bukkit version pattern 2011-11-20 16:40:18 +01:00
snowleo a886645afa Add SmallFireball to EssProtect 2011-11-20 15:43:39 +01:00
snowleo 8c478c76a5 Added option to /fireball command: /fireball small 2011-11-20 14:34:03 +01:00
snowleo 293f2f7cd2 Added new mobs 2011-11-20 14:33:17 +01:00
snowleo 1f6b1f4a2c Added new methods to Fake classes 2011-11-20 14:30:54 +01:00
snowleo 765ec51b32 Added the new items to items.csv 2011-11-20 14:30:21 +01:00
snowleo c132a75c1a CB# 1467 B#1022 2011-11-20 14:03:00 +01:00
ElgarL 000d060ea6 better groups match checking for globalgroups 2011-11-20 02:27:25 +00:00
ElgarL 317b0833ef Prevent Group.equals tests throwing a NullPointerException for
GlobalGroups.
2011-11-19 20:46:34 +00:00
KHobbits 4f8319bbb9 Warn in the console if group prefixes are too long.
People using displayname prefixes can set longer chat prefixes in the chat config.
2011-11-18 23:08:16 +00:00
KHobbits cd9ea163e4 Continuing code cleanup 2011-11-18 22:09:26 +00:00
KHobbits fc00ff471d Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-11-18 19:18:06 +00:00
snowleo 85ef892f0e Null checks 2011-11-18 20:15:26 +01:00
KHobbits 2e0fb15952 More code cleanup. 2011-11-18 18:33:22 +00:00
KHobbits 11f02fb947 Code cleanup continues... 2011-11-18 18:11:49 +00:00
KHobbits e5a8cd88f0 Code cleanup continued. 2011-11-18 17:48:49 +00:00
snowleo 9987568ae8 New I18n code, not used yet 2011-11-18 15:04:22 +01:00
KHobbits a05f730e76 Little more command cleanup. 2011-11-18 13:48:31 +00:00
KHobbits 5655509c62 Updating gitignore to ignore private files. 2011-11-18 12:10:36 +00:00
KHobbits a9b77b3486 Updating gamemode to allow essentials.gamemode.other. 2011-11-18 12:08:27 +00:00
KHobbits 37bd9bc9b5 Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-11-18 12:07:11 +00:00
KHobbits e54d73704e Command cleanup 2011-11-18 12:06:59 +00:00
KHobbits e5c77c1aeb Updating web push to just push the zip files. 2011-11-18 12:06:19 +00:00
snowleo edf0ab756c Updated UserMap to newest Guava-API 2011-11-18 05:29:27 +01:00
snowleo c96b14a34c Remove useless import 2011-11-18 05:23:38 +01:00
snowleo 3841648eba Update ExecuteTimer to use ns instead of ms for calculations, output is still in ms 2011-11-18 05:13:38 +01:00
snowleo ffc1640308 Java 1.5 clients will never reach that point, so we can remove it. 2011-11-18 04:22:09 +01:00
snowleo 0bbc1e540b motd and rules are now configured in the files motd.txt and rules.txt, values from config.yml are copied automatically
New features:
Info command now understands the tags from motd and rules
motd and rules are now multipage
On join, only the first page of motd is shown.
2011-11-18 04:18:03 +01:00
snowleo 2a98734d22 Better solution for the alternative commands 2011-11-18 01:43:58 +01:00
snowleo 603d23659b Check for other plugin aliases and run them instead. 2011-11-18 01:01:05 +01:00
snowleo 41c03853ab General fix against overwriting already existing protections 2011-11-17 17:06:06 +01:00
snowleo 2a4c26ee69 Prevent that sign protection in EssProtect can be circumvented by placing signs. 2011-11-17 16:20:31 +01:00
snowleo 8143154826 The data value of leaves changed by 4
0 -> 4, 1 -> 5, 2 -> 6 to make them permanent, items.csv should be updated automatically
2011-11-17 16:14:56 +01:00
snowleo c5c29aef4e Merge branch 'refs/heads/groupmanager' 2011-11-17 15:34:05 +01:00
ElgarL 7b7d1f557f Fixed a crash on reload due to bukkit not unloading plugins before
reloading.
2011-11-17 14:28:33 +00:00
snowleo af5a86c48c Fix water/lava bucket bug with mobs 2011-11-17 14:23:35 +01:00
ElgarL 022f7ab1d4 Fixed GM holding files open and causing the time stamp to be incorrect.
This caused GM to require a '/mansave force' when it shouldn't be
needed.
2011-11-17 05:46:01 +00:00
snowleo b9daf6aaa5 Sudo: This would break horrible for offline players and the original player object has to be used. 2011-11-16 04:26:24 +01:00
KHobbits 4be1797592 Sudo Command
This might never make it to release, needs tidying first at least.
2011-11-16 03:00:31 +00:00
KHobbits c0d046841f Gamemode sign, standard sign permissions. 2011-11-16 00:21:55 +00:00
KHobbits e4c3f7b115 New permission: essentials.repair.armor
If a player has this permission '/repair all' will also repair equipped armor.
2011-11-15 23:54:26 +00:00
KHobbits f51b92c99e Updating banip to support offline players. 2011-11-15 23:01:15 +00:00
snowleo eda827b244 Merge branch 'refs/heads/groupmanager' 2011-11-15 22:52:05 +01:00
snowleo 27ee7efde5 Cleanup of the /tree commands 2011-11-15 22:51:14 +01:00
snowleo cccebdd62e null the Essentials object in static EcoApi, so it doesn't leak on /reload.
TODO: Make the eco api non-static
2011-11-15 22:51:14 +01:00
snowleo d2f3bf94ae Prevent that players are teleported to offline players using /tpa and players that lost their tpahere permission 2011-11-15 22:51:14 +01:00
ElgarL f4e22a17db Added comments to groups.yml for global groups 2011-11-15 18:17:18 +00:00
KHobbits b619a54105 Prevent client crash on 'Free air' 2011-11-14 10:11:23 +00:00
snowleo cd897890be Fix #1106 GeoIP announces players who are hidden, on join. 2011-11-11 03:27:09 +01:00
ElgarL 437d3b41b8 Remove bperms nodes which shouldn't be in globalGroups 2011-11-08 13:03:32 +00:00
KHobbits 90c9fe7e65 Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-11-08 05:16:15 +00:00
ElgarL e9f942e802 Change to default users as examples 2011-11-07 22:15:58 +00:00
ElgarL f40260acef Minor optimization for Group loading/clone 2011-11-07 15:33:15 +00:00
ElgarL ab2e8f94f0 Fix for Users file being flagged as updated when it wasn't. 2011-11-07 01:59:12 +00:00
ElgarL cf9ef46182 Fixed Group/User reloading
Fixed Group.clone(dataholder)
2011-11-05 15:41:40 +00:00
KHobbits cc5062828a Extra translation keys. 2011-11-05 00:12:07 +00:00
KHobbits 165d499ef3 Adding op/god mode to whois. 2011-11-04 23:41:39 +00:00
ElgarL 1c7e0e5b9f Fix for file date conflict causing memory data to be wiped. 2011-11-04 23:13:42 +00:00
KHobbits f0c49019dd Only pull/push data on valid player data. 2011-11-04 23:13:21 +00:00
ElgarL e7234e621d Optimize notify test so it's not run as often 2011-11-04 18:20:09 +00:00
ElgarL 269947bdae Fix string compares 2011-11-04 18:12:37 +00:00
ElgarL 4ac5551c6b Notification of being moved to the default group only happens if it's a
demotion/promotion (not on join).
2011-11-04 17:51:29 +00:00
KHobbits 05242a7e8f Force displayname update on /list.
Tidy duplicate displayname call.
2011-11-04 16:51:00 +00:00
KHobbits fd2ec22919 Clear all powertools - /powertool c: 2011-11-04 16:42:03 +00:00
KHobbits 7618754b89 Removing Reloadall Command
Tidy plugin.yml
2011-11-04 16:20:09 +00:00
KHobbits d8f7c82e2d Start logging players last login address. 2011-11-04 15:28:51 +00:00
KHobbits fd4c82b0eb Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-11-04 11:40:33 +00:00
KHobbits 70d1c7d7d7 Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-11-04 11:40:18 +00:00
KHobbits 894d956ba1 Extra command alias's. 2011-11-04 11:39:31 +00:00
ElgarL 52c2110a2b Fixed up javadoc comment errors 2011-11-04 09:36:11 +00:00
snowleo 8890284b3e Temporary debug mode using /essentials debug 2011-11-04 02:44:00 +01:00
KHobbits 02cc1b9fe9 Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-11-04 00:45:03 +00:00
KHobbits 6d6a29a99d Alias for 'Everyone' on warp signs. 2011-11-04 00:44:41 +00:00
snowleo 1d95f1c6d2 Fix bug in sign state loop 2011-11-04 01:24:01 +01:00
KHobbits 6e4bf932ec Adding game mode command for quick toggling (/gm /creative /gamemode) 2011-11-03 23:39:13 +00:00
KHobbits a9a8216f4d Spanish translation 2011-11-03 23:11:04 +00:00
KHobbits f98eb4a40d Adding gamemode to whois
Fixing exception in unban
2011-11-03 23:10:42 +00:00
KHobbits 51920420ce Allow proper escaping and use of & symbol in nicks (&& = &). 2011-11-03 22:19:33 +00:00
KHobbits d171cce45d Trim long nicknames for use in tab list
Colour Nicknames
Refactor /nick Command
Fix nickother validity checks.
2011-11-03 22:13:50 +00:00
ElgarL 5560ab4294 Fix for an error in checkFullUserPermission caused by players
disconnecting mid perms update.
2011-11-03 20:42:34 +00:00
ElgarL 87ccd7bf46 Fix for an error in checkFullUserPermission caused by silly requests for
a null perm.
2011-11-03 20:29:30 +00:00
KHobbits d264c26310 Allow the use of the warp command from the console 2011-11-03 16:17:39 +00:00
ElgarL e873ebd67d GM will now check to see if it's data files have been changed at each
scheduled save.
	  If the files have been altered (on disc) it will reload, so long as
the in-memory data hasn't changed.
	  If the files on Disc have changed AND there have been changes to it's
in-memory data it will show a warning.
	  You then MUST issue a '/mansave force' to overwrite the disc files,
or a '/manload' to overwrite the memory data.
2011-11-02 22:33:29 +00:00
KHobbits 375636cd36 Code tidy, trigger build id update. 2011-11-01 16:54:36 +00:00
ElgarL 57f9bc06b0 Prevent setting 'minutes' in the config to zero causing an error. 2011-11-01 12:12:32 +00:00
ElgarL 97cae6c0cb Added a config.yml setting of 'validate_toggle' for those who prefer
'mantogglevalidate' to always be off.
2011-10-31 20:41:50 +00:00
ElgarL 1fd02b8a4a Expanded 'canUserBuild()' to include inheritance and subgroups. 2011-10-31 20:20:57 +00:00
ElgarL 9734274ed1 Fixed an error on 'manucheckv'. If the users doesn't have the variable
it fell through causing an exception.
Added checking of subgroups for Info nodes.
2011-10-31 20:07:21 +00:00
ElgarL 3f2916967d Added Info node support to Global Groups. 2011-10-31 17:23:24 +00:00
ElgarL 0731de53b4 Typo's and formatting 2011-10-31 09:14:58 +00:00
ElgarL 0f67d42c99 Global Groups yml and class 2011-10-31 08:34:57 +00:00
ElgarL 34ba8e89bc Added Global Groups
Defined in groupmanager/globalgroups.yml.
Create groups in the yml with a g: prefix, then inherit in the worlds
groups files.
2011-10-31 08:34:07 +00:00
ElgarL b1c6173995 Fixed GM loading world data files twice at startup.
Improved error reporting for invalid groups.yml
2011-10-31 02:06:25 +00:00
okamosy dd87dcdd3d Merge branch 'master' of github.com:essentials/Essentials into ess 2011-10-30 21:30:21 +00:00
okamosy ffd7ba7d5f EssChat update part 1. 2011-10-30 21:29:56 +00:00
KHobbits 4ac03ef15a Debug messages: Execution time on reload/enable.
~ Probably needs removed later?
2011-10-30 05:38:17 +00:00
KHobbits 8daa0e7a9b Removing translations for portal actions. 2011-10-30 01:26:05 +00:00
KHobbits 982c3fef0d Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-10-30 01:37:40 +01:00
KHobbits 1757badf64 Cleanup last references to portal management in Essentials. 2011-10-30 01:37:18 +01:00
snowleo 5196237c46 XMPP: Don't send messages from spy users back to them. 2011-10-30 00:18:55 +02:00
KHobbits 094a747db3 More message, in /me 2011-10-29 10:36:30 +01:00
KHobbits 284f48f631 Updating actions to allow translations, and colour. 2011-10-29 09:38:32 +01:00
KHobbits c2c889cab9 Tidy the XML a little and test a library property. 2011-10-29 04:31:56 +01:00
KHobbits a2619a6e2b More teamcity fixes. 2011-10-29 02:50:57 +01:00
KHobbits 6e16e4724d Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-10-29 02:49:03 +01:00
KHobbits 9afcba4739 Will teamcity like this change? 2011-10-29 02:48:42 +01:00
KHobbits c05e8085ed Lets try a adding a few dependencies. 2011-10-29 02:31:05 +01:00
KHobbits 6d86f40ca3 Updating build order. 2011-10-29 02:23:13 +01:00
KHobbits cc9e7130e8 Adding the handler to the (painful) list of permissions systems we support. 2011-10-29 02:16:29 +01:00
KHobbits 809d18575d File formatting. 2011-10-29 02:09:11 +01:00
KHobbits 56b5a128f5 GM permission handler...
Look mum, no bridge.
2011-10-29 02:06:27 +01:00
KHobbits 8915c29b31 Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-10-28 22:07:43 +01:00
ElgarL 819c8f3aa9 Fixed GM to recognize Superperm child nodes.
If you add a node like Towny.admin GM will now correctly report on
all child nodes.
2011-10-28 18:43:29 +01:00
snowleo 6c479fceed Removing never used ErrorHandler and UpdateTimer from Essentials Core, they are now in EssentialsUpdate 2011-10-27 18:45:27 +02:00
KHobbits 04de66bc8a Sneaking in an option to disable prefix/suffix selectively.
(This will probably be removed during ess chat rewrite).
2011-10-27 06:17:18 +01:00
KHobbits 32cc1b66a4 Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-10-27 05:48:45 +01:00
KHobbits 65a588ea20 Altering PEX prefix/suffix. 2011-10-27 05:47:55 +01:00
snowleo e0a29ed6a0 Don't block /essentialsupdate command after selfupdate 2011-10-27 01:18:59 +02:00
ElgarL fadfc490a7 v 1.5:
- Fixed opOverrides and bukkit_perms_override to read the correct
entries.
	- Better commenting in config.yml
2011-10-27 00:04:54 +01:00
snowleo fd7894caae After the selfupdate, check for the bukkit version. We will not automatically update bukkit, so the player is displayed a message, if he tries to update or install. 2011-10-27 00:41:12 +02:00
snowleo 8200fc2a98 Close file input on exception 2011-10-27 00:08:48 +02:00
snowleo 4b6fc99a62 Crop after 15KB and add a note, that it's cropped by the upload. 2011-10-27 00:06:15 +02:00
snowleo 60b9d4fc80 Some cleanup, refactoring of EssentialsHelp class 2011-10-27 00:03:16 +02:00
snowleo 7622c5c510 Abort update text 2011-10-26 22:27:43 +02:00
snowleo 76f8cb96ca Reload after installation 2011-10-26 22:23:30 +02:00
snowleo f6e56ce0f4 Removing automatic updates
It's a bad idea to automatically overwrite files, without asking the player first.

This would be triggered by the selfupdate after the reload.
2011-10-26 22:17:27 +02:00
snowleo 72596decba The state machine now handles both manual updating and installation. 2011-10-26 22:14:24 +02:00
snowleo e8b8d26bdb Basic automatic updates downloader 2011-10-26 20:25:09 +02:00
snowleo d5cb9ab965 Cleanup 2011-10-26 20:24:46 +02:00
snowleo 9914e187e2 Cleanup 2011-10-26 20:23:28 +02:00
snowleo 36fa05f3a6 The work process is done async to the server loop. 2011-10-26 19:54:38 +02:00
snowleo 5641b1173c Abort the installation wizard if a runtime exception happens 2011-10-26 19:46:40 +02:00
snowleo 48f8eb9788 Cleanly resume the installation, if the player quits the game and reconnects
If the installation is already running in background after the wizard, it will not stop, if the player quits the game.
2011-10-26 19:39:01 +02:00
snowleo 7f825750f0 Advanced mode 2011-10-26 18:18:58 +02:00
snowleo 102570958e Allow states to be automatically added to the state map.
They have to have a Constructor that accept the StateMap as argument, otherwise a RuntimeException is thrown.
2011-10-26 17:42:39 +02:00
KHobbits 38b6d79f49 Few more states in EssentialsUpdate 2011-10-26 16:26:26 +01:00
KHobbits d064c68875 Fixing invsee error. 2011-10-26 06:02:54 +01:00
KHobbits 2bb45022d6 Extra triggers for /sell inventory 2011-10-26 03:32:38 +01:00
KHobbits dc2e23c85a Improved readability of /sell
~translations need checking~
2011-10-26 03:05:09 +01:00
KHobbits 5a54ef355f Cleanup debug message, code tidy. 2011-10-25 22:18:28 +01:00
KHobbits 9af6bdb1d6 Only prevent AFK heal, if freeze player is enabled. 2011-10-25 16:21:56 +01:00
KHobbits dca88382ab Fix health event name. 2011-10-24 17:46:53 +01:00
KHobbits d4a495fb52 Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-10-24 17:00:05 +01:00
KHobbits a4556e8cf0 AFK users shouldn't heal from full hunger. 2011-10-24 15:37:44 +01:00
snowleo c79bb03d5e Cleanup 2011-10-23 23:22:04 +02:00
snowleo 9c793208ad Minor changes because we use a map instead of a list 2011-10-23 23:20:18 +02:00
snowleo b07b3fc373 Another state added 2011-10-23 23:13:30 +02:00
snowleo ff92e0bf6f Less chance for C&P error 2011-10-23 23:11:47 +02:00
snowleo 8854b3f565 Moving the link between the states from the constructor of the state machine to the states classes. 2011-10-23 23:08:42 +02:00
KHobbits 6974abea28 Automatically unAFK on interaction. 2011-10-23 21:51:38 +01:00
snowleo 9433acf689 Statemachine for installation wizard (WIP) 2011-10-23 21:45:01 +02:00
snowleo aa922c5b67 Fix Test 2011-10-21 01:36:13 +02:00
snowleo 1a020698d1 Use of lomboks delegate on player wrapping 2011-10-21 01:23:35 +02:00
snowleo 022b8caa18 CB#1337
B#953
2011-10-21 00:12:03 +02:00
snowleo 14c406f7fb Merge branch 'refs/heads/groupmanager' 2011-10-21 00:04:40 +02:00
snowleo 4d877741d4 Cleanup 2011-10-19 18:17:19 +02:00
snowleo 1cbd10a38e Moved all config options to new Settings classes 2011-10-19 17:52:07 +02:00
snowleo 358456c8ea Cleanup 2011-10-19 14:47:32 +02:00
snowleo 1c7dcfc63d Merge pull request #30 from tustin2121/master
Porting Some Player-Only Commands to the Console
2011-10-19 05:38:56 -07:00
Tim P 82b225a261 Minor fixes. Basic testing shows all works. 2011-10-18 23:08:06 -04:00
Tim P 6ab30159fa Made a concerted effort to change the messages.properties in the various languages
to the new format for weather.
- Incidently, there was an error in the _da translation - the message for the key
  weatherSun did not have a "in your world" clause. This is added with the "your
  world" clause changed, like it is everywhere.
2011-10-18 22:01:23 -04:00
Tim P a86a1990cd Made a couple commands available for the console (ones that make sense to be able to
access from the command line).
2011-10-18 12:12:41 -04:00
KHobbits 625c7d0302 Save the ban reason, not the command name. 2011-10-18 05:35:21 +01:00
KHobbits 27a0552c2a Removing debugging. 2011-10-18 02:21:26 +01:00
KHobbits 7c5674c294 More debugging 2011-10-18 02:11:22 +01:00
KHobbits f5c442aa5c Adding a debug note. 2011-10-18 01:55:35 +01:00
ElgarL 569af0bcf0 Added data.save.hours setting to config. This allow control over how
long backups are retained.
2011-10-16 08:58:45 +01:00
snowleo 238748f360 Updated german translation by HDS 2011-10-16 09:39:06 +02:00
ElgarL e049364557 Simplified config.yml while retaining backwards compatibility. 2011-10-16 03:35:55 +01:00
ElgarL 121966436e Fixed reading world mirrors from the config. 2011-10-16 01:23:25 +01:00
snowleo d3afd7a670 Revert bed fix, because it's fixed in Bukkit now. Thanks to feildmaster 2011-10-15 10:49:51 +02:00
snowleo 9d121af860 Test if objects can be read from yaml in the original sort 2011-10-15 01:15:01 +02:00
snowleo 200ef0c8e2 Correctly fix the N/S direction 2011-10-15 01:15:01 +02:00
KHobbits 6f77a2ba07 Moving apikey outside main file.
Keep the actual key in local repo ;)
2011-10-13 20:45:57 +01:00
KHobbits db97ce99ef Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-10-13 17:20:03 +01:00
KHobbits e7b790861f Made a silly little upload script, for uploading things to dev bukkit. 2011-10-13 17:19:25 +01:00
snowleo d3aaf3c14a New storage system for settings (WIP) 2011-10-13 01:40:11 +02:00
KHobbits d732821e06 Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-10-12 17:10:31 +01:00
snowleo e628c36172 Cleanup 2011-10-12 12:20:02 +02:00
snowleo 9312871250 Replacing martyr with Pircbot 1.5 2011-10-12 05:00:36 +02:00
snowleo 860d446d28 EssentialsUpdate WIP 2011-10-12 03:14:26 +02:00
ElgarL 03adb56d25 Added a config setting - bukkit_perms_override: false
Enable to allow default Bukkit based permissions to remain enabled,
unless directly negated within GroupManager.
2011-10-12 00:16:53 +01:00
ElgarL 1543bfd550 v 1.4:
- Updated for Bukkits new YamlConfiguration.
	- Cleared remaining Cast errors cause by object cloning.
2011-10-11 22:05:21 +01:00
KHobbits 9ec398b39b Fixing german translation error. 2011-10-11 20:05:38 +01:00
ElgarL 1bb3eb0d07 Added two new permission nodes - groupmanager.notify.self &
groupmanager.notify.other
	  These allow players/admins to be notified when players are moved
between groups.
2011-10-11 13:10:29 +01:00
snowleo 5395b6f73a Merge branch 'master' into groupmanager 2011-10-11 12:51:53 +02:00
snowleo 5851c5a88b Changes for new Bukkit 2011-10-11 12:49:10 +02:00
snowleo 1c1726cfa4 CB#1317
B#941
2011-10-11 12:49:10 +02:00
ElgarL a6bafca091 Removed null supression in GroupManager.java 2011-10-11 01:07:52 +01:00
ElgarL 6877f95636 Merge branch 'groupmanager' of
https://elgarl@github.com/essentials/Essentials.git into groupmanager

Conflicts:
	EssentialsGroupManager/src/Changelog.txt
2011-10-11 01:05:48 +01:00
ElgarL cb41b7ac33 Fixed manudelsub not correctly selecting the group to remove. 2011-10-11 01:03:38 +01:00
KHobbits d2fa4523ce Changing essentials URL, we should at least give one that works, although bukkitdev would probably be better. 2011-10-11 00:37:03 +01:00
ElgarL 9129386f12 Fixed manudelsub not correctly selecting the group to remove. 2011-10-11 00:34:17 +01:00
snowleo 02ee314ab1 Fix NPE in BUY signs 2011-10-10 11:40:20 +03:00
snowleo a34c92d55a Fix of the recharge code, also the maximum line length on signs is 15 not 16! 2011-10-10 00:27:55 +02:00
snowleo 6012086fa5 Reverting ementalos change on freeze-afk, hopefully fixing the flickering. 2011-10-09 23:45:46 +02:00
snowleo 67c0f57756 Cleanup 2011-10-09 23:31:13 +02:00
snowleo 164070b487 Notch decided that the sun rises north and sets south.
"Corrected" values for /getpos and /compass
2011-10-09 23:23:00 +02:00
snowleo d658c75cec Prevent that long lines are stored on the sign 2011-10-09 23:00:58 +02:00
snowleo 4c69412501 Allow players to recharge trade signs without breaking them.
Also don't give out items, if their inventory is full.
2011-10-09 22:52:11 +02:00
snowleo 75a0164ea0 Don't spill out items, if inventory is full on buy signs. 2011-10-09 22:25:30 +02:00
KHobbits 9dde04e4b8 Edited Essentials/src/items.csv via GitHub 2011-10-09 22:10:40 +02:00
snowleo 3496df6468 Allow to disable the death messages of minecraft 2011-10-09 20:59:06 +02:00
snowleo ac794bb2b7 Corrected datavalues for pistons 2011-10-09 20:57:34 +02:00
snowleo 7384991efa Cancel early, not late 2011-10-09 20:14:41 +02:00
snowleo f3dc846b1b Prevent players with essentials.sleepingignored permission from going to bed. Prevents a bug in bukkit. 2011-10-09 20:10:21 +02:00
snowleo 81994160e8 Allow players with essentials.signs.trade.override permission break invalid trade signs. 2011-10-09 17:06:32 +02:00
snowleo cf59a90c52 Throw RuntimeException instead of NPE, if the api is called before Essentials is loaded. 2011-10-09 16:53:01 +02:00
snowleo a9a87710f3 Easier version of /banip username 2011-10-09 16:44:35 +02:00
snowleo 5984cd5835 Fix pull request of damage request 2011-10-09 16:43:58 +02:00
snowleo 8fe0887141 Merge pull request #29 from zzbomb/patch-1
Improved to operate like.. "banip <IP|Username>" bans the specified IP or
2011-10-09 07:07:15 -07:00
snowleo 8389a59d54 Merge pull request #27 from feildmaster/patch-1
Fires an event before "killing."
2011-10-09 07:06:45 -07:00
snowleo 010245e1a5 Merge pull request #28 from feildmaster/patch-2
Edited Priority to "High" of chat listener
2011-10-09 07:05:55 -07:00
snowleo 313df9988d Fix NPE in /repair 2011-10-08 19:41:41 +02:00
zzbomb 16384159e7 Improved to operate like.. "banip <IP|Username>" bans the specified IP or the IP of the user specified. 2011-10-08 10:04:07 -03:00
snowleo 06900e19f0 We can get the console command sender from server object now. 2011-10-06 11:54:09 +02:00
snowleo 55fc8bdd57 Register 1.5 2011-10-04 23:06:06 +02:00
snowleo aaf25d8b9a Merge branch 'master' into groupmanager 2011-10-04 22:19:40 +02:00
snowleo 0645d58594 Since it will be released, it needs a new version number 2011-10-04 22:19:23 +02:00
snowleo 11d22f95cc Removing obsolete Nether portal code.
If you want more control over the worlds, I recommend using Multiverse.
/world command still exists, it can be used to switch between worlds. The default ratio of 8 is used for nether.
2011-10-04 21:58:47 +02:00
snowleo 65a78a6ea9 Null check for probably corrupted worlds 2011-10-04 21:33:09 +02:00
ElgarL 9f52931191 Comment config.yml to prevent creation of world4 data files 2011-10-04 15:59:26 +01:00
KHobbits 93d0ab7906 Updating Readme 2011-10-04 15:56:43 +01:00
KHobbits 9718e654ac Nick length patch 2011-10-04 14:39:40 +01:00
KHobbits 4d5121c21d Revert "Less dupe code on last commit."
This reverts commit 531f40ceee.
2011-10-04 10:27:58 +01:00
KHobbits 531f40ceee Less dupe code on last commit. 2011-10-04 10:16:35 +01:00
KHobbits b672d38db8 Fix for /tjail not teleporting users back due to cooldown. 2011-10-04 10:13:44 +01:00
KHobbits acdad5c6ac Merge branch 'essmaster' into groupmanager 2011-10-04 09:43:34 +01:00
KHobbits 1a0aa7970b Updating bPermissions 2011-10-04 09:43:00 +01:00
KHobbits 579b30c8f7 Updating bpermissions to latest. 2011-10-04 09:39:02 +01:00
KHobbits c1fa543524 Adding unjail alias to tjail. 2011-10-04 09:23:44 +01:00
KHobbits 0297d22fac FoodLevelChange event, update. 2011-10-04 09:05:04 +01:00
KHobbits 608ebfdb4a Add hunger replenish to /heal (Do we want to add a toggle?) 2011-10-04 08:34:06 +01:00
KHobbits da337284e5 Adding list name to /nick support. 2011-10-04 07:21:09 +01:00
KHobbits 0aa9f79629 Removing a few restrictions on manuadd, it shouldnt be a clone of manpromote after all. 2011-10-04 06:55:42 +01:00
KHobbits 9f4d79a756 Updating to CB 1240
Bukkit 875
2011-10-04 06:54:45 +01:00
KHobbits aa0935c64b Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-10-03 10:19:31 +01:00
KHobbits 16111b56ad Safe location fix:
x and z needs floor, while y should be round.
2011-10-03 09:58:46 +01:00
feildmaster 4c0fc6e52f Edited Priority to "High"
Adds compatibility to plugins that adds text to the current "format."
2011-10-03 03:45:38 -05:00
feildmaster 7668af15b0 Fires an event before "killing."
Can be made cancel-able.
Could also be written to add "suicide" (if sender == player)
2011-10-03 03:40:42 -05:00
KHobbits 3b9aa445e9 Updating safe teleport locations to include 1.8 blocks. 2011-10-03 08:08:05 +01:00
KHobbits b2614e363b Fixing mail argument errors. 2011-10-03 06:42:38 +01:00
ElgarL 49e2c38289 Fix for Bukkit passing a null To location on a player Portaling 2011-10-02 18:00:42 +01:00
ElgarL 3030093907 Added the ability to handle unknown worlds at server start.
(GM will create the data files for any worlds it finds which are not
in the config.yml)
2011-10-01 21:07:39 +01:00
ElgarL 0e867df195 Moved events into GMWorldListener
Better error output
2011-10-01 17:58:44 +01:00
ElgarL bfd6049913 Missed Event class 2011-10-01 17:07:34 +01:00
ElgarL d2c02569d0 Added event handling to manage new world creation at runtime. 2011-10-01 17:06:14 +01:00
ElgarL 1f6daa7424 Fix for loading of worlds not in the config
Fix for folder creation of unique worlds
2011-10-01 16:22:04 +01:00
ElgarL 30af6f36ce Attempt to stop GM wiping groups/users yml's on a bad shut down. 2011-10-01 13:54:28 +01:00
ElgarL f712b56671 Rewrote Config loading to use Bukkits Configuration features
Added an opOverride setting in config.
	  If present and set to false, op's will not get overriding permissions
in GroupManager.
	  (one op will not be able to alter another op's settings)
GM will now create all relevant world data files for non mirrored
worlds.
	  (for all worlds named in config.yml)
2011-10-01 13:44:06 +01:00
ElgarL 0462026f33 Fixed an issue with superperms where plugins define perms with
inheritance after the root perms
2011-10-01 11:22:19 +01:00
KHobbits ea76161ba5 Allow different 'sets' of multiple homes, definable by permission.
- Not sure I like this, but it does seem to work
- changed config key for backwards compatibility (config node sets value on failure).
2011-10-01 10:08:58 +01:00
KHobbits 629dee3a91 Adding MOTD flags to config.yml
Setting config.yml 'warn-on-build-disallow: true' - should reduce number of confused support requests.
2011-10-01 05:02:32 +01:00
KHobbits f415924811 Patching /unlimited to not give items if player is in creative mode. 2011-10-01 04:57:49 +01:00
KHobbits 4172c563d0 Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-09-30 20:18:08 +01:00
ElgarL ab67d0e232 Changed priority if Registered events to lowest. 2011-09-30 08:51:09 +01:00
snowleo 5ea512817a Don't set last location if it's invalid 2011-09-30 02:11:13 +02:00
snowleo d4c7ea1cd1 Deprecation our TargetBlock class:
There is a function in bukkit that we should use instead
user.getTargetBlock(...)
2011-09-30 01:09:00 +02:00
snowleo 4edf1ad3f5 Kits timeout are now saved in user data 2011-09-30 00:53:25 +02:00
snowleo 6224b07215 Allow the deletion of broken homes 2011-09-30 00:27:53 +02:00
snowleo a5239ef601 Allow delhome for offline users 2011-09-30 00:15:57 +02:00
snowleo 458068ae87 Fix god mode enabled after afk player quit the game 2011-09-30 00:09:48 +02:00
snowleo 44e920e441 More exceptions thrown 2011-09-29 23:59:25 +02:00
snowleo f8450e39e3 Correctly throw exceptions if mob spawn protection is on 2011-09-29 23:59:24 +02:00
snowleo c6e68f72ea Only afk people, if they have essentials.afk permission. 2011-09-29 23:59:24 +02:00
KHobbits 4a52cd7c98 Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-09-29 22:52:10 +01:00
snowleo 9d68261bac Corrected plurals of new creatures and removed Monster creature, because it can't be spawned anymore 2011-09-29 23:36:49 +02:00
snowleo f2407bcc31 Fixing line endings 2011-09-29 01:38:56 +02:00
KHobbits a8cfbe1eab Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-09-29 00:34:10 +01:00
KHobbits 03b73072d9 Hiding the nether options, that are going to be removed in a future release. 2011-09-29 00:33:55 +01:00
ementalo 48049f3870 Fix freezeafk so that moving with mouse does not teleport you about. Add check for if some takes the ground away from you 2011-09-29 00:24:52 +01:00
snowleo d2c553652f Allow both essentials.build and permissions.build in PermissionsBukkit 2011-09-29 01:10:54 +02:00
KHobbits ee00fb77d0 Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-09-27 02:01:18 +01:00
ElgarL d890418944 Update to 1.2 2011-09-27 01:59:01 +01:00
KHobbits 8e0560ae1a Make sure we don't bounce people with expired tempbans. 2011-09-26 23:37:00 +01:00
KHobbits 8b23f8608d Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-09-26 22:54:34 +01:00
KHobbits 0dd5134f5a BanIP fixed, work around for isBanned. 2011-09-26 22:37:14 +01:00
ElgarL a39a904c8a Optimized getAllPlayersPermissions and fixed pushing unknown perms to
superperms.
2011-09-26 21:52:32 +01:00
ElgarL 1d38b72835 Fix for GM not checking inheritance for known superperms nodes. 2011-09-26 21:24:12 +01:00
KHobbits efcab71969 Updating for register 1.3 2011-09-26 03:20:56 +01:00
KHobbits 41e11a738d Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-09-25 15:02:01 +01:00
ElgarL 62e1710607 Fixed silly error with isLoaded() 2011-09-25 03:14:38 +01:00
KHobbits c681befdf2 Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-09-24 21:41:28 +01:00
ElgarL 2db256678e Fix for if the scheduler fails 2011-09-24 19:18:22 +01:00
ElgarL a2ca381bbd Forgot to push task 2011-09-24 19:11:59 +01:00
ElgarL 32f5a31ea5 Added a BukkitPermsUpdateTask to only update superperms once on a
load/reload.
2011-09-24 19:10:55 +01:00
KHobbits 87dc671a0d Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-09-24 17:36:10 +01:00
ElgarL 621f9b4f48 Removed superperms update on plugins unloading. Unneeded and created
undesired lag on shutdown.
2011-09-24 17:33:25 +01:00
KHobbits 3858e1cdd6 Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-09-24 16:01:04 +01:00
ElgarL ff7cc5aec9 manulistp <name> + now only lists perms with a value of true 2011-09-24 15:55:53 +01:00
ElgarL d18a47a643 Final fix for lag on manload 2011-09-24 15:48:01 +01:00
ElgarL 497a08940e manulistp now accepts an additional + to list ALL Superperms
effective permissions (/manulistp <name> +).
manucheckp also outputs superperms results.
2011-09-24 15:26:55 +01:00
KHobbits bd8fe521cd Adjusting behavior of 'spawn-if-no-home'. 2011-09-24 03:31:20 +01:00
KHobbits 59c93901d3 Minor typing errors in messages.properties 2011-09-24 03:19:05 +01:00
KHobbits 3177f25eb6 Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-09-24 03:18:25 +01:00
ElgarL b0fe189156 Fixed wasteful updating of perms on a manload. 2011-09-24 02:53:38 +01:00
ElgarL 8103e822ed Fix for null in PLAYER_TELEPORT for bukkit perms. 2011-09-24 02:47:01 +01:00
KHobbits c597653ce2 Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-09-22 17:51:10 +01:00
KHobbits d9ceb727ef Fix for home names containing invalid characters. 2011-09-22 17:50:42 +01:00
ementalo 2844af0039 Throw correct exceptions Test #943 2011-09-22 17:29:00 +01:00
KHobbits e9c0bb2133 Adding extra creature types to prevent spawn setting. 2011-09-22 15:08:55 +01:00
snowleo 33c6fc1f1f Missing file for last commit 2011-09-22 10:47:39 +02:00
snowleo 91b504cc66 Correctly implement food level on god mode 2011-09-22 10:46:23 +02:00
snowleo 6ea57bcd2f New Methods in Player 2011-09-22 10:39:43 +02:00
snowleo c92c066a3a CB#1185
B#855
2011-09-22 10:33:30 +02:00
snowleo caff3c115b BPermissions 1.6.0
Prefix/suffix support for bPermissions
Star permissions are now done by bPermissions
2011-09-22 01:03:54 +02:00
snowleo 517961b26a Merge pull request #26 from codename-B/patch-2
So... it's just some updates.
2011-09-21 15:52:36 -07:00
Ben 85f63d0afe So... it's just some updates. 2011-09-22 00:50:26 +02:00
KHobbits ecc56351ec Merge pull request #25 from codename-B/patch-1
Edited Essentials/src/examples/bpermissions.yml via GitHub
2011-09-21 13:34:24 -07:00
KHobbits 9b04705ec9 Update to cb #1181 2011-09-21 21:29:31 +01:00
Ben e786653364 Edited Essentials/src/examples/bpermissions.yml via GitHub 2011-09-21 22:26:30 +02:00
snowleo e5613d43cc CB#1173
Merge branch 'groupmanager'

Conflicts:
	lib/bukkit-0.0.1-SNAPSHOT.jar
	lib/craftbukkit-0.0.1-SNAPSHOT.jar
2011-09-21 21:38:52 +02:00
ElgarL ce8f05cd94 - Update to handle 'getDescription().getPermissions(') returning a
list (CB 1172).
2011-09-21 16:23:47 +01:00
snowleo e52a9c1f6b Merge branch 'groupmanager' 2011-09-21 14:30:27 +02:00
ElgarL de744fe9e2 - Reverted WorldHolder static change to maintain backward plugin
compatability.
2011-09-21 12:30:11 +01:00
snowleo a0031d1d45 New config setting: protect.prevent.enderman-pickup
Defaults to false
2011-09-21 02:30:58 +02:00
snowleo d60dd01f0f Added enderman pickup to sign protection 2011-09-21 02:29:51 +02:00
snowleo ad3bc2ad98 CB#1163
B#847
2011-09-21 02:10:40 +02:00
snowleo cf69a6d72c Food for Godmode: There is no event for food yet, so we have to update it manually.
Test #939
2011-09-20 19:29:04 +02:00
snowleo 1a65a31a7e Heal-Signs sets food level to full and removes fire
Test #938
2011-09-20 18:27:26 +02:00
KHobbits 9c998eac2f Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-09-20 15:13:08 +01:00
ElgarL 2bdc00dc14 All GroupManager commands issued by players are now echoed in the
console.
2011-09-20 14:49:42 +01:00
snowleo 83e8dac6a0 Add missing ; 2011-09-20 15:53:26 +03:00
snowleo 3879d582d3 Merge pull request #24 from eXeC64/master
Fixed bug where players are unable to remove their own chest protection.
2011-09-20 05:44:50 -07:00
KHobbits 1fd5222d40 Merge remote branch 'remotes/ess/groupmanager' into essmaster 2011-09-20 13:36:55 +01:00
Harry Jeffery fe15bab05f Fixed bug preventing players from removing their own signs 2011-09-20 12:33:42 +01:00
ElgarL f2dd51cf57 Fix for pushing perms of non superperms supporting plugins 2011-09-20 10:35:05 +01:00
ementalo ac1f2badc7 do not show socialspy for own actions. Test #732 2011-09-20 00:15:13 +01:00
ElgarL d3f6e82474 - Push updates to superperms for all valid GM commands. 2011-09-19 22:51:07 +01:00
ementalo 676f941bb8 cleanup of *.properties 2011-09-19 22:48:29 +01:00
ementalo bd74bd1286 Added new command /powertooltoggle, enables / disables all powertools assigned (does not remove them) Test #919 2011-09-19 22:41:39 +01:00
snowleo 5831cde90e Ignore ComputationExceptions while loading users async 2011-09-18 22:18:54 +02:00
snowleo b2394048fa Allow yaw & pitch in /tppos 2011-09-18 03:34:05 +02:00
snowleo 4811e46dd6 Updated german translation from ThatGangsta on IRC 2011-09-18 03:29:48 +02:00
snowleo 8d266a3440 Fix GroupBridge build 2011-09-18 02:02:09 +02:00
snowleo f680fb1b76 Fix GroupBridge build 2011-09-18 01:58:57 +02:00
snowleo a845f351f8 The correct ant variable from TeamCity 2011-09-18 01:27:39 +02:00
snowleo 997a409b5a Using ant properties 2011-09-18 01:25:04 +02:00
snowleo a6673c5157 One build file for all configurations 2011-09-18 01:07:43 +02:00
snowleo 5ef7135fc8 Removed PermissionsCommands from BuildAll 2011-09-18 00:50:05 +02:00
snowleo 4c698762c3 Automatic updates for future versions of items.csv
We also update all 1.7.3 versions of items.csv
2011-09-18 00:49:34 +02:00
snowleo 82e389be8f New animals for spawner and spawnmob 2011-09-17 19:50:57 +02:00
snowleo 1df79bc9f4 GroupManager 1.1
Merge branch 'groupmanager'

Conflicts:
	EssentialsGroupManager/src/plugin.yml
	EssentialsGroupManager/src/users.yml
2011-09-17 13:19:47 +02:00
snowleo ab590af927 New items.csv by andrewkm 2011-09-17 13:17:10 +02:00
snowleo 002e4a2772 New methods in player and server interface. 2011-09-17 13:14:34 +02:00
snowleo 0e9b971280 CB#1137
B#837
2011-09-17 13:10:10 +02:00
ElgarL 73b5fe971f Read from group not user for setting superperms 2011-09-16 20:15:25 +01:00
KHobbits 6398626559 Quickfix: Slightly changing syntax to stop conflict - This needs to be properly addressed 2011-09-15 07:08:05 +02:00
snowleo 828f97c9a8 Merge branch 'bukkitupdate' 2011-09-15 00:34:29 +02:00
snowleo d6d4752383 Fix getSafePosition once again.
This time: Fix the rare case where the double number is slightly below the actual number (like 1.9999999998)

Also: Fix the case, when the player teleports somewhere in a 2 block high space and on the floor is something like rails.
2011-09-11 04:17:55 +02:00
okamosy d2bf35dac2 added a clearall option to powertools 2011-09-10 10:39:35 +01:00
okamosy 8d6e3e7c18 Merge branch 'master' of github.com:essentials/Essentials 2011-09-10 09:39:15 +01:00
KHobbits 0b057d8e29 Move 'spawnifnospawn' check to home decision tree. 2011-09-09 14:23:42 +01:00
snowleo 4c6cc5ced0 Updates for banning
Removing the ban workaround

We might remove the ban commands completely.
2011-09-07 22:34:53 +02:00
snowleo b828222176 CB#1089
B#823
2011-09-07 22:07:31 +02:00
ElgarL bbab993ef1 Doh, jumped a version 2011-09-06 10:19:11 +01:00
ElgarL b110ce79cc Final tidy up of superperms for GM 1.2 2011-09-06 10:13:32 +01:00
ElgarL ab530f35d0 removed unneeded include 2011-09-06 10:12:15 +01:00
ElgarL 0654a76ccc - Fixed BukkitPerms population. Wasn't correctly setting superperms. 2011-09-06 10:11:21 +01:00
snowleo e8fbdef38b Using the correct player object for dispatching the command on powertool use. 2011-09-05 22:59:37 +02:00
snowleo 998d097d7d Fix afk not disabled after command use 2011-09-05 04:14:02 +02:00
snowleo fd6f768cca Ignore more local branches 2011-09-04 20:45:59 +02:00
ElgarL aa085de3e7 Push to Build dev version 2011-09-04 02:09:11 +01:00
ElgarL 2e1c880502 - Fix for an infinite loop bug with the new Bukkit Perms during a new
user creation.
2011-09-03 17:53:34 +01:00
ElgarL e3756623a1 - Fix for Users.yml containing only 'users:' causing a crash.
- GroupManager will now generate a fresh Users and Groups yml if either
file is empty.
2011-09-03 16:13:43 +01:00
ElgarL 8f28073b29 Minor change to GM's config.yml to make it slightly easier to understand
mirroring
2011-09-03 15:41:23 +01:00
ElgarL e2024ca2b6 - Invalid groups assigned to players in users.yml will no longer cause
a crash. GM will now set them to the default group instead.
2011-09-03 15:29:44 +01:00
ElgarL 80491513a2 Damn typos 2011-09-03 14:39:10 +01:00
ElgarL f67e13122d correct typo on setDefaulttWorldHandler 2011-09-03 14:33:47 +01:00
Steve 16e19a7775 - GroupManager will now attempt to select the default world when using
commands instead of failing and telling you to use '/manselect <world>'.
2011-09-03 14:24:32 +01:00
ElgarL a220b267d4 - Fixed users being able to use 'manuadd' to add users to higher groups
than their own.
	- Added SuperPerms support so GM will update adn provide the
permissions to plugins which only support Bukkit Perms.
	- Added more helpful output to errors on argument lengths.
2011-09-03 11:33:14 +01:00
ElgarL 1153a0eee4 Bukkit Superperms support 2011-09-02 23:07:23 +01:00
snowleo 7d8b0c102c Cross world move check 2011-09-02 17:16:46 +02:00
KHobbits 4abbbcb82b Throwing an error on /sethome if you cant set multiple homes. 2011-09-02 15:58:25 +01:00
snowleo 248e4e2ae2 Disabling update check for now, we have to find a better solution. 2011-09-02 16:28:34 +02:00
snowleo fb211d722c Prevent that hidden players broadcast afk messages
Prevent that moving players triggers unafk too early, they can now move within a radius of 3 blocks from the position where they went afk.
2011-09-02 16:16:15 +02:00
KHobbits 1b3698283e fix failed edit on github 2011-09-02 09:40:14 +02:00
KHobbits cccddc3311 Edited Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java via GitHub 2011-09-02 09:35:26 +02:00
snowleo fc7a3e091d Restore tempban functionality 2011-09-01 17:55:13 +02:00
snowleo f6b4daebb5 items.csv changes by andrewkm 2011-09-01 17:54:05 +02:00
snowleo 382bd24046 Prevent afk message after login, also don't show afk message on logout. 2011-09-01 15:29:45 +02:00
snowleo e0d913dbaf Sample permissions for PermissionsBukkit, PermissionsEx and bPermissions 2011-09-01 13:47:49 +02:00
snowleo bb1cad1bc1 Copy&Paste Bugs are always stupid 2011-09-01 11:52:52 +02:00
snowleo d7af679243 Cleanup 2011-08-31 13:03:01 +02:00
snowleo c8f6ea7f8e Cleaner checkPermissions() 2011-08-31 13:02:21 +02:00
snowleo d3dd4980a4 Using base instead of our wrapped player for permission check. 2011-08-31 12:51:59 +02:00
Steve b140f606b4 added PermissionHandler.class and .project/.classpath so this will build
in eclipse
2011-08-31 01:56:31 +01:00
snowleo 057c9cb3f5 Minor rewrite of Permissions package, all the stuff is now in one place. 2011-08-30 23:26:23 +02:00
snowleo ecc1a0acea Missing nochargeexception in /home and /world 2011-08-30 09:46:31 +02:00
KHobbits afb951461c Adding throw to prevent double charge. 2011-08-30 03:42:31 +01:00
snowleo e9a14b204f NoChargeException for teleport commands 2011-08-30 03:15:50 +02:00
snowleo 1cbdbc40a5 /help now supports multiple permissions for a command in plugin.yml
Also minor cleanup
2011-08-30 03:15:10 +02:00
snowleo 5d4aa95fc3 First update check is done 10 minutes after server start. 2011-08-30 02:36:16 +02:00
snowleo 17e11adf9a Catch NPE in /powertool, also cleanup 2011-08-30 01:14:03 +02:00
Steve 3454db3e2b Test commit to see if push works
Updated plugin.yml to alpha-6 for GM
2011-08-29 21:15:33 +01:00
snowleo 12e3eb1a23 Fix compatibility issues with Citizens 2011-08-28 23:51:10 +02:00
snowleo a60f040f7e Cleanup 2011-08-28 14:24:31 +02:00
snowleo 22c277f9ab If PermissionsBukkit or bPermissions is detected, we don't need the config switch. 2011-08-28 14:12:27 +02:00
snowleo fa423b3dd2 Updates to Plugin listener 2011-08-28 13:57:36 +02:00
snowleo 0c37e091c0 Adding support for two more permission systems. 2011-08-28 13:47:20 +02:00
snowleo 3dd3fa4519 Revert "Testing yaml annotations"
This reverts commit fba4dd2d9a.
2011-08-28 06:24:34 +02:00
snowleo b559809bfa Another build fix 2011-08-28 06:17:43 +02:00
snowleo 59e45592cf Allow the build server to build again. 2011-08-28 06:16:01 +02:00
snowleo 1fb57cb678 Disabling broken test 2011-08-28 05:21:12 +02:00
snowleo fba4dd2d9a Testing yaml annotations 2011-08-28 05:12:13 +02:00
snowleo 3ec0dbd404 Oops, these too. 2011-08-27 23:54:23 +02:00
snowleo 5a5dc933ad Forgot this one 2011-08-27 23:38:21 +02:00
snowleo 6427a93d14 Correctly charge for the use of commands.
We now first test, if the user could pay it, do the stuff and then charge him. If the command throws an exception, the user will not be charged.
2011-08-27 23:14:49 +02:00
snowleo 610a713997 Fixes to auto afk 2011-08-27 22:29:57 +02:00
snowleo 347be03b25 Display which permission system is used. 2011-08-27 21:13:33 +02:00
snowleo 322ecdb9fc Less use of Craftbukkit code, so less things will break on MC update.
Added try/catch around the tnt and creeper protection code. The event will now always canceled, even if our fake explosion code fails.
2011-08-27 20:39:54 +02:00
snowleo 033babd586 Cleanup & output result of backup command 2011-08-27 17:50:44 +02:00
snowleo d3302dea00 Protect detector/powered rails 2011-08-27 17:11:15 +02:00
okamosy 8249a961f6 Merge branch 'master' of github.com:essentials/Essentials 2011-08-27 16:10:47 +01:00
okamosy 41344ce1b0 fixed home commands syntax to match multi-home 2011-08-27 16:10:35 +01:00
snowleo 65be2dba99 Protect detector/powered rails 2011-08-27 17:09:43 +02:00
snowleo 087e600d6d Prevent that wrong ids are used in /kit 2011-08-27 17:01:01 +02:00
snowleo f18c3c7e1d Disable /nick if change-displayname is disabled
Some translations
2011-08-27 16:56:45 +02:00
snowleo 394a786044 Another fix for /repair 2011-08-27 16:21:29 +02:00
snowleo 14030deb16 Cleanup of repair command and allow different charges for each item. 2011-08-27 16:19:23 +02:00
snowleo 0543a8f8ba Prevent kick for floating while afk & frozen 2011-08-27 15:43:26 +02:00
snowleo 34987d6e07 Fixes for afk 2011-08-27 15:30:56 +02:00
snowleo 631583aef0 Cleanup of EssentialsConf and delete empty files or files that are corrupt. 2011-08-27 15:30:30 +02:00
snowleo 8998168ec2 Auto-AFK, AFK-Kick and freeze afk players 2011-08-27 13:59:49 +02:00
KHobbits 00050d08d4 Powertool fix. 2011-08-27 02:54:45 +01:00
okamosy aa47499656 Merge branch 'master' of github.com:essentials/Essentials 2011-08-26 21:03:25 +01:00
okamosy bc93bc6ae7 Cleaned up todo lists 2011-08-26 21:03:09 +01:00
KHobbits dfd283d998 Merge branch 'master' of github.com:essentials/Essentials into essmaster 2011-08-26 05:14:03 +01:00
KHobbits 016dd10060 Adding essentials.delhome.others to allow people to delete other peoples homes. 2011-08-26 05:13:38 +01:00
snowleo 8281908306 PVP protection for arrows and other projectiles. Needs cleanup. 2011-08-26 04:46:08 +02:00
snowleo 01861e5a64 Correctly catch signs ignition 2011-08-25 17:37:54 +02:00
KHobbits 3d913f9fcc Make home throw an exception if the world doesn't exist.
Add multiverse/missing world support to home upgrade.
2011-08-24 05:18:35 +01:00
KHobbits 6c738294d1 Skip default home if it's invalid. 2011-08-24 03:49:35 +01:00
KHobbits 30f0f78efc Fixing NPE on Entity Listener (Powertool). 2011-08-24 03:09:27 +01:00
KHobbits 8cc249c2d3 Essentials.sethome.others doesn't imply essentials.sethome.multiple.
Restore essentials.home.others permission check.
2011-08-24 02:48:38 +01:00
okamosy 6946488e0d updated to use corrected joinList function. 2011-08-23 23:40:48 +01:00
okamosy 53a73998a2 Updated joinList to properly handle lists of lists. 2011-08-23 23:40:41 +01:00
okamosy f12a14d7f7 Added util function concat(List) and concat(string, list) to concatenate lists into a string.
Updated powertool to use new concat method.
2011-08-23 23:40:27 +01:00
okamosy 089c2210bd Merge branch 'master' of github.com:khobbits/Essentials 2011-08-23 22:58:48 +01:00
okamosy 1a2fc307fd updated to use corrected joinList function. 2011-08-23 22:58:19 +01:00
KHobbits 38aa85dd0c Join full server patch. 2011-08-23 22:35:15 +01:00
okamosy c374f474ed Merge branch 'master' of github.com:khobbits/Essentials 2011-08-23 19:48:09 +01:00
okamosy 2a1b19a8a8 Updated joinList to properly handle lists of lists. 2011-08-23 19:47:50 +01:00
KHobbits 325889c466 Merge branch 'master' of github.com:essentials/Essentials 2011-08-23 18:16:33 +01:00
KHobbits 216cc7f681 Fix to repair in plugin.yml 2011-08-23 18:15:45 +01:00
KHobbits 7df5098bf6 Homes tolower.
Max homes fix.
2011-08-23 15:37:09 +01:00
snowleo 27adc21446 midnight = 12am
noon = 12pm
2011-08-23 15:36:54 +01:00
snowleo 5de354af86 midnight = 12am
noon = 12pm
2011-08-23 13:22:11 +02:00
KHobbits bb32ec9567 Adding delhome
Making sethome allow redefine
2011-08-23 07:04:33 +01:00
KHobbits 6ee7017603 Adding Home upgrade script.
Tidying up home code.
2011-08-23 06:09:34 +01:00
KHobbits 9dc54340f8 Merge branch 'master' of github.com:essentials/Essentials 2011-08-23 03:43:14 +01:00
KHobbits 0592c1fe11 Added multiple homes.
Permissions currently: essentials.sethome.multiple and essentials.sethome.multiple.unlimited
New config setting: multiple-homes (default value 5)
2011-08-23 03:42:32 +01:00
snowleo 90419cdbf5 Update check for Essentials 2011-08-23 02:46:19 +02:00
snowleo 91393e3180 Show filename on yaml error 2011-08-23 01:28:01 +02:00
okamosy dfdf49ac35 Merge branch 'master' of github.com:khobbits/Essentials 2011-08-22 22:55:55 +01:00
okamosy d2a3240905 Added util function concat(List) and concat(string, list) to concatenate lists into a string.
Updated powertool to use new concat method.
2011-08-22 22:10:23 +01:00
KHobbits 1138e32292 Merge branch 'master' of github.com:essentials/Essentials 2011-08-22 18:45:46 +01:00
snowleo d818f705ad Cleanup 2011-08-21 21:30:01 +02:00
snowleo 1ac033a60e Pages for /warp command 2011-08-21 21:27:36 +02:00
snowleo af248a1d2e Wait 1 second after deactivation of protect to allow the database to close. 2011-08-21 21:27:22 +02:00
okamosy c0d21b6044 Removed commented-out code 2011-08-21 20:06:25 +01:00
okamosy e10675dfdc Completed changing powertool config from tokenized string to lists 2011-08-21 19:33:37 +01:00
okamosy 812a357361 added config upgrade for powertools 2011-08-21 19:02:01 +01:00
okamosy ac20207ea1 Merge branch 'master' of github.com:khobbits/Essentials 2011-08-21 17:53:39 +01:00
okamosy 43d7fb367b converted powertool config to use lists instead of tokenized strings
Powertool update
2011-08-21 17:52:58 +01:00
KHobbits 040e2bee86 Fixing trade sign messages
Unifying tree/spawnmob code for block selection
Adding TL notes
2011-08-21 17:08:32 +01:00
okamosy 6f88e7bb98 Merge branch 'master' of github.com:khobbits/Essentials 2011-08-21 02:53:10 +01:00
okamosy 45f88016fc Added ability to assign multiple powertools to an item
Added option to list commands assigned powertools
2011-08-21 02:50:48 +01:00
KHobbits 5a1ea77019 Merge branch 'master' of github.com:khobbits/Essentials 2011-08-20 21:58:55 +01:00
KHobbits 83fc7de01a Fixing trade message to be more user friendly. 2011-08-20 21:58:26 +01:00
okamosy d14f278ecf added charge command
fixed formatting
2011-08-20 21:23:44 +01:00
KHobbits 69b76b810c Merge branch 'master' of github.com:khobbits/Essentials 2011-08-20 20:55:21 +01:00
KHobbits 2c787e07ec Switching trade sign flag 2011-08-20 20:54:54 +01:00
okamosy 3e9b27e3ef Added command repair [hand|all]
fixed if statements in commandsell
2011-08-20 20:49:17 +01:00
okamosy 4bc3d5efad Merge branch 'master' of github.com:khobbits/Essentials 2011-08-20 18:11:56 +01:00
okamosy 9791dcc0bc Reformatted ptime and time messages
fixed typo in plugin
2011-08-20 18:09:55 +01:00
KHobbits 84068c18b1 Updating default permissions. 2011-08-20 18:06:43 +01:00
KHobbits a32b55e28f Translation for tpall + tidy. 2011-08-20 16:44:42 +01:00
KHobbits 8d1262fc91 Check jail first, before setting. 2011-08-19 12:16:28 +01:00
KHobbits a2f727bebc Success message on /spawner
Switch to use mob class.
2011-08-19 12:06:35 +01:00
snowleo 2b48045a8f Removed unused users map 2011-08-19 02:32:34 +02:00
snowleo a53d8ddef1 Protection signs: First check for ownership, then for allowed users. 2011-08-19 01:43:39 +02:00
snowleo 2690696712 Corrected german translation. 2011-08-19 01:30:10 +02:00
snowleo c79ac59bc0 Added KHobbits to authors 2011-08-19 01:06:15 +02:00
KHobbits 6a9865cd67 Changing default prefix behavior to be a little smarter. 2011-08-17 17:40:11 +01:00
KHobbits 5d95d1fca6 Adding command cost for !shout and ?question. 2011-08-17 15:28:58 +01:00
KHobbits 2541efb682 Adding instructions to accept tpaall. 2011-08-17 14:27:27 +01:00
KHobbits 8ff405f2fe Adding /tpaall - Teleport here request to all players. 2011-08-17 14:19:47 +01:00
KHobbits 376d206d2b Removing advice to move to perm3 2011-08-15 22:58:50 +02:00
ementalo 6295127589 #RB 1060 Updates 2011-08-15 20:36:43 +01:00
snowleo 1c381fc203 Merge branch 'master' into groupmanager 2011-08-14 22:05:08 +02:00
snowleo b93d289176 Update Permissions3.jar in lib folder to 3.1.6 2011-08-14 21:57:21 +02:00
snowleo a2fa666fd5 GroupManager update to Permissions 3.1.6 API done by ElgarL 2011-08-14 21:56:40 +02:00
snowleo 76eb00575b Update Permissions3.jar in lib folder to 3.1.6 2011-08-14 21:55:22 +02:00
KHobbits 81d7be4f77 Merge pull request #22 from okamosy/master
Adding hidden players to tpo/unlimited update
2011-08-11 13:01:01 -07:00
okamosy b776362be7 Added ability to clear entire list of of unlimited items
Fixed permission bug with per item spawning
General unlimited cleanup
2011-08-11 20:47:51 +01:00
okamosy 65df249510 Added support for teleporting to hidden players
Permission: essentials.teleport.hidden
2011-08-11 15:52:34 +01:00
KHobbits 6fa2b14d65 Merge pull request #1 from okamosy/master
added error message
2011-08-11 07:08:39 -07:00
okamosy 6ec674d0a3 added error message when attempting to pay a user that isn't online 2011-08-11 15:03:08 +01:00
snowleo 93883cfc12 Catch NPE while login of new player 2011-08-11 13:43:04 +02:00
snowleo 2e565f8881 Allow the use of the world spawn in EssentialsSpawn for new players. 2011-08-11 13:32:11 +02:00
KHobbits b851cd10f2 Fix help for plugins which miss command descriptions. 2011-08-11 06:56:33 +01:00
KHobbits 576b48c08c Todo/alias. 2011-08-11 05:20:43 +01:00
KHobbits 5ca9927987 Fix unbanning players who don't have user files. 2011-08-11 04:38:00 +01:00
KHobbits a753f322df Updating /help for static ptime. 2011-08-11 03:34:07 +01:00
KHobbits 300ee9c729 Fix sethome/seen for invalid players. 2011-08-11 03:33:45 +01:00
KHobbits 1fbed62c1d Stop searching for tp location after a chunk. 2011-08-11 03:33:09 +01:00
KHobbits a21d80ecd8 /ptime list output message change 2011-08-11 03:04:57 +01:00
KHobbits 1e7bf9a46c Removing hole in floor, tp cop-out.
This should force the code to find an suitable tp location.
- Not sure how well this will effect performance, but wanted to test it.
2011-08-11 02:59:40 +01:00
KHobbits 19595c5847 Add '@' prefix to time, to fix the time, rather than relative. 2011-08-10 15:06:42 +01:00
KHobbits 47c8217511 Merge diff from krnlyng:
Adjust item spawn, to allow for match native names.
2011-08-10 10:45:24 +01:00
KHobbits db50d455df Fixing annoying text match. 2011-08-10 12:35:04 +06:00
KHobbits ec5746dbe6 Fixing omission on last patches. 2011-08-10 12:05:05 +06:00
KHobbits 05ba5c00e6 Patch around broken bukkit method. 2011-08-10 11:36:09 +06:00
KHobbits bb2b504d7a Trim help message to fit on 1 line.
Added old time alias.
2011-08-10 10:46:33 +06:00
KHobbits 5bb86309f6 Fixing display timezone if the server isn't running GMT+1 2011-08-10 10:41:03 +06:00
KHobbits abbeb0a212 Added method to list users fixed time. 2011-08-10 05:25:45 +01:00
KHobbits d9d781a33a Adjust times a little bit to be more realistic? 2011-08-10 04:54:03 +01:00
snowleo 327c15c5be Allow other plugins to use the same first line on signs as essentials. Just make sure that the player, who creates the sign does not have essentials.signs.signname.create or essentials.signs.create.signname permission. 2011-08-08 22:40:54 +02:00
snowleo 858e2a8b89 Reverting some changes to /time command 2011-08-08 18:21:38 +02:00
snowleo 33d37a2f96 Revert "Prevent closing already closed statements"
This reverts commit b9fc6a0b2b.
2011-08-08 18:14:20 +02:00
snowleo a8f6014a42 Some fixes to the time code by me 2011-08-08 17:51:16 +02:00
snowleo a117080b32 Some fixes to the time code by me 2011-08-08 17:49:32 +02:00
snowleo f75390bd3f Correct code format for file DescParseTickFormat 2011-08-08 17:46:12 +02:00
snowleo b07ba21659 Corrected permission testing a bit 2011-08-08 17:01:03 +02:00
snowleo a109134b92 Part of oloflarsson new time command
Semi complete awesome time command. This is missing: Help text, I18N.
2011-08-08 17:00:04 +02:00
snowleo 69d3921a6a Fixes to jail 2011-08-08 16:42:56 +02:00
snowleo ca3369938d Minor cleanup 2011-08-08 16:32:59 +02:00
snowleo fbd9ee9453 XMPP: Let xmpp users see xmpp messages from other xmpp users. 2011-08-08 16:30:32 +02:00
snowleo 8185b05b5d XMPP: reconnect to server, if connection is broken. 2011-08-08 16:03:00 +02:00
snowleo b9fc6a0b2b Prevent closing already closed statements 2011-08-08 15:56:23 +02:00
snowleo 62ebf3db41 Fix /spawner with PigZombie 2011-08-08 15:34:32 +02:00
snowleo a90b16be36 Prevent muted players from using /msg 2011-08-08 15:34:10 +02:00
snowleo d07ecde47d Fix essentials.joinfullserver 2011-08-08 15:24:38 +02:00
snowleo 5db35458e8 Limiting the length of the name on signs to 13 instead of 14 2011-08-08 15:13:27 +02:00
snowleo cf4752dad6 Restrict sign protections to valid signs only 2011-08-08 15:07:26 +02:00
snowleo a085503c84 Users are now loaded async, so we have a new internal structure where they are saved.
I also did some cleanup on the classes that I worked on.

This needs testing, it might break, because it does not behave 100% identical like before.

it's possible that /balancetop now needs more time to finish, if not all users are loaded into memory.
2011-08-08 14:40:40 +02:00
snowleo 9a893f65fe Changes to build-impl by Netbeans 2011-08-08 14:40:39 +02:00
KHobbits cc273e919c Adding extra alias's to plugin.yml 2011-08-08 10:41:26 +01:00
KHobbits 65702ea0bf Updating register to latest build. 2011-08-08 10:20:04 +01:00
KHobbits 614b7b84f7 Adding new register methods. 2011-08-08 10:17:13 +01:00
KHobbits a04e0533d6 More register libs 2011-08-08 10:02:18 +01:00
KHobbits b85a5e9e0d Making /help <string> match the plugin name. 2011-08-08 09:23:48 +01:00
KHobbits bb6b2c9374 Merge branch 'master' of github.com:essentials/Essentials 2011-07-28 03:49:10 +01:00
KHobbits df47aad478 Removing failed translation. 2011-07-28 03:47:42 +01:00
KHobbits 9eb73cf854 Merge pull request #21 from khobbits/master
rainbow sheep
2011-07-27 17:20:16 -07:00
KHobbits 12777af61a adding sheep:random to /spawnmob 2011-07-28 01:15:47 +01:00
KHobbits acb50786c4 Merge pull request #20 from khobbits/master
Ban changes
2011-07-27 06:28:57 -07:00
KHobbits 33f48eae0d Adjusting the config file to mention the help permission 2011-07-27 14:26:04 +01:00
KHobbits 7b18343e75 Adding a permission for unhiding help. 2011-07-27 14:25:41 +01:00
snowleo beb34a7651 Allow fractions of 1 2011-07-27 01:04:21 +02:00
snowleo 0ac26265e2 Fix for money exploit on trade signs 2011-07-27 01:00:55 +02:00
KHobbits d6dc6d1d39 fixing lost revision. 2011-07-26 14:28:23 +01:00
KHobbits 0ab8a2760d Adding tempban/kick broadcast permissions and adding a banned by to the broadcast.
Adding tempban/kick broadcast permissions and adding a banned by to the broadcast.
Merge branch 'master' of github.com:khobbits/Essentials

Conflicts:
	Essentials/src/messages.properties
	Essentials/src/messages_da.properties
	Essentials/src/messages_en.properties
	Essentials/src/messages_fr.properties
	Essentials/src/messages_nl.properties
Merge branch 'master' of github.com:khobbits/Essentials
2011-07-26 14:23:14 +01:00
ementalo 8bb4067f06 double quoting ' 2011-07-26 10:35:55 +02:00
ementalo fe1820134b Merge pull request #19 from khobbits/master
Xesxen's Dutch translation.
2011-07-26 01:34:32 -07:00
KHobbits 7d7c686e6a Edited Essentials/src/plugin.yml via GitHub 2011-07-25 23:25:07 -07:00
KHobbits 0b681c3654 Edited Essentials/src/messages_nl.properties via GitHub 2011-07-25 19:24:14 -07:00
KHobbits 23eeb82ac4 Edited Essentials/src/messages_nl.properties via GitHub 2011-07-25 19:20:42 -07:00
snowleo edd6adc78f Another obsolete file 2011-07-24 23:33:48 +02:00
snowleo c9028623ac Removed useless files 2011-07-24 23:30:11 +02:00
snowleo dd5bcb8762 Edited README.markdown via GitHub 2011-07-24 14:25:12 -07:00
snowleo bc1c252dca Correcting all line endings to LF 2011-07-24 23:19:12 +02:00
KHobbits 19ba6e5195 Added plural alias for kit & warp 2011-07-24 12:47:59 -07:00
snowleo 864e608582 Added code guidelines to all projects, so we don't need them globally.
Compress jar files
Don't copy lib files into dist folders
Removed vendor names
Changed all java versions to 1.6 to make it consistent.
2011-07-24 04:07:28 +02:00
snowleo b84785cc82 If add-prefix-suffix is not set in config and EssentialsChat is installed, it will default to true now for backwards compatibility. 2011-07-24 00:41:54 +02:00
snowleo 164541794e SuperpermsBridge fail 2011-07-23 13:17:22 -07:00
snowleo 7aea9e71e8 NPE check in PlayerInteract 2011-07-23 19:13:05 +02:00
snowleo dc0ca35017 More german translations 2011-07-23 03:10:53 +02:00
snowleo 4099755b9b German translation for muted 2011-07-23 03:07:21 +02:00
snowleo 0f3c0e82f2 Readded some code, so that the user is not checked, if he is next to himself. 2011-07-23 02:07:25 +02:00
snowleo 0e21d3287e Fix Util.getSafeDestination() to use int instead of double. 2011-07-23 02:06:13 +02:00
snowleo 3cedfeef2c Separate config setting for prefix/suffix 2011-07-23 01:43:02 +02:00
snowleo a20f2b71da Added more default permissions for players to config.yml 2011-07-23 01:29:31 +02:00
snowleo b2e3290038 Removed quotes from translation files 2011-07-23 01:13:55 +02:00
snowleo 979592c8ba Missing space in Spawnmob message 2011-07-23 01:10:22 +02:00
snowleo 7001798874 Don't give out a full stack on /unlimited, instead either 2 or 1, if the max stack size is 1 2011-07-23 01:03:45 +02:00
snowleo 40a2bccf2d Now the cleanup 2011-07-23 00:53:55 +02:00
snowleo ee13d33b66 Revert "minor cleanup"
This reverts commit 5027198010.

Don't mess with the line endings!
2011-07-23 00:50:52 +02:00
snowleo fdb46f60fd Add white color after each name to prevent coloration of the next name. 2011-07-23 00:47:02 +02:00
ementalo 5027198010 minor cleanup 2011-07-22 23:33:33 +01:00
ementalo 90a5a4a470 Merge pull request #17 from Macel/master
Added translations to plugin help command failure log messages
2011-07-22 15:13:47 -07:00
Robert Meany 85cab9533e *First Commit - Please verify I did everything right* - Added translations
to plugin help command failure log messagets.
2011-07-22 13:53:06 -04:00
ementalo 304b13ca5e SignProtection code fix number 92324 2011-07-22 17:16:08 +01:00
ementalo 6a1c53dd01 SignProtection another fix 2011-07-22 17:03:55 +01:00
ementalo d7b2ac97aa fix of my fix 2011-07-22 16:56:41 +01:00
ementalo 7b7289db4c Test #725 fix for Protection signs created before 2.5 2011-07-22 14:07:04 +01:00
ementalo ba2b827d7c Test #723 essentials.ban.notify - only people with this permission get notified on ban 2011-07-22 12:36:49 +01:00
snowleo 54559172c6 /unlimited: Instead of 2, give the player a full stack 2011-07-21 02:58:20 +02:00
snowleo 2067bb8f0d EssentialsChat: The user should see his own message
Corrected radius
2011-07-21 02:42:54 +02:00
snowleo 4f31d2779d Null pointer check for Perm 2.7.4 prefix/suffix 2011-07-21 02:09:54 +02:00
snowleo ed29f29622 Merge pull request #15 from khobbits/patch-3
Not sure how well this would work, but its probably worth giving the user at least two of the item to combat client lag, if you try and build something with unlimited, but you only have 1 item, client lag prevents you from doing so quickly, because you need to wait for the server to give you back the item.
2011-07-20 16:44:51 -07:00
snowleo b8e41df0f6 Merge pull request #16 from Brettflan/master
Fix for local chat, leftover Factions cleanup
2011-07-20 16:43:41 -07:00
Brettflan 602517473d Fix for local chat not working (instead acting just like global chat) 2011-07-20 18:08:02 -05:00
Brettflan cee0823db4 Removed leftovers from initial Factions integration 2011-07-20 18:06:58 -05:00
snowleo 8b41219fcc Updated VanishNoPickup:
vanish player if they are set as hidden on join
2011-07-20 23:58:41 +02:00
snowleo 61fa43a769 Updated VanishNoPickup
Correctly save hidden users
Allow /vanish hide playername from console
2011-07-20 23:48:21 +02:00
snowleo 28dd14d38c Fix /time for players without essentials.time.world 2011-07-20 23:18:09 +02:00
snowleo f6e6e0042a Updated VanishNoPickup
Moved /noaggro command to /vanish aggro
2011-07-20 23:08:47 +02:00
snowleo 9efc0840e3 VanishNoPickup 1.9.12+essentials2 2011-07-20 22:35:59 +02:00
snowleo 815b700eac Don't return offline players with getPlayer() 2011-07-20 22:14:56 +02:00
snowleo fcda9f9d3b Prevent players to create correct signs with essentials.signs.color permission. 2011-07-20 22:04:02 +02:00
snowleo aa663c0c98 Don't teleport to offline users. 2011-07-20 22:03:15 +02:00
snowleo bda2f5e615 Show player not found message, if no unhidden player is found in /msg 2011-07-20 21:36:23 +02:00
snowleo 377f967dab Native support for PermissionsEx 2011-07-20 20:42:19 +02:00
snowleo 06dc9c25af Revert "I don't think we need this anymore."
This reverts commit 83b71eef5e.

Also inverted it, so it works now again.
2011-07-20 18:36:29 +02:00
snowleo feb1c53004 Spawnmob sign 2011-07-20 18:20:12 +02:00
snowleo 2530a5018f Cleanup 2011-07-20 18:19:26 +02:00
snowleo 4bb1185bd5 Added VanishNoPickup 1.9.12+essentials1 2011-07-20 17:25:32 +02:00
KHobbits d5c8d0c1bf Not sure how well this would work, but its probably worth giving the user at least two of the item to combat client lag, if you try and build something with unlimited, but you only have 1 item, client lag prevents you from doing so quickly, because you need to wait for the server to give you back the item. 2011-07-20 08:15:40 -07:00
snowleo 8828fb0868 Socialspy for aliases of commands
Adding tell as alias of msg
2011-07-20 17:11:59 +02:00
snowleo cc29ebbbc9 Fix: Unmute players, even if they have essentials.mute.exempt permission 2011-07-20 17:10:55 +02:00
snowleo 0483635a5c More changes to the EssentialsChat API for Factions 2011-07-20 12:12:49 +02:00
snowleo 3b59dd0b02 Fix duplicated logger messages in GM after reload 2011-07-19 12:04:06 +02:00
snowleo e805d1047f The event.getPlayer() is needed for the hook. 2011-07-19 11:29:16 +02:00
snowleo dc99efb0a7 Rewritten Factions hook, so we don't need Factions in our code. 2011-07-19 11:26:23 +02:00
snowleo 6a156ede68 Removing the annoying c3p0 start message. 2011-07-19 11:11:59 +02:00
snowleo 4a963b22f1 Close database connections on plugin deactivation 2011-07-19 10:34:02 +02:00
snowleo 150a0e0ddd /tempban and /ban have the same problem as /tjail
new permissions:
essentials.ban.offline
essentials.tempban.offline
2011-07-19 01:32:48 +02:00
snowleo d388290427 user.dispose() should be called on every quit. 2011-07-19 01:27:56 +02:00
snowleo c8ba06f0ee We can't test for essentials.jail.exempt, if the player is offline, so added a new permission essentials.togglejail.offline 2011-07-19 01:27:16 +02:00
snowleo a65390ed98 More fixes to /tjail
Don't prevent unjailing an admin
Fix time change
2011-07-19 01:12:19 +02:00
snowleo 6b85b306ef Another fix for /tjail offline players 2011-07-19 00:59:43 +02:00
snowleo fdbb6510ef Send helpop messages to console 2011-07-19 00:46:41 +02:00
snowleo d0bf1905a9 {UNIQUE} player count for motd 2011-07-19 00:10:33 +02:00
snowleo 548666b79b show hidden for /whois 2011-07-19 00:09:30 +02:00
snowleo 6dbb5bc605 Always use lowercase if accessing users map. 2011-07-19 00:02:35 +02:00
ementalo 15687c20d0 only check hidden if !offline, compare user with offlineplayer class 2011-07-18 22:49:27 +01:00
ementalo 81cc5b1f28 Add yet another way to get a user from our users list, Don't teleport an offline player when jailed
Added playerjoin to jaillistener to teleport a player on login
2011-07-18 22:16:58 +01:00
snowleo 7aea8a3fce NPE fix in InventoryWorkaround 2011-07-18 22:39:01 +02:00
snowleo d2bc7e01a2 Workaround for the crippled bukkit permissions.
Splits the node at . and checks for * permissions on all levels.
2011-07-18 13:18:28 +02:00
snowleo 3d232e13d9 New config settings for Protect:
protect.prevent.tnt-playerdamage
protect.prevent.fireball-fire
protect.prevent.fireball-playerdamage
2011-07-18 07:22:28 +02:00
snowleo 83b71eef5e I don't think we need this anymore. 2011-07-18 06:19:40 +02:00
snowleo 13e5f22c25 Removed " from language files 2011-07-18 06:14:00 +02:00
snowleo b88d0f88a1 Fix: Player staying afk if moving 2011-07-18 06:08:13 +02:00
snowleo d727cad2db Merge branch 'master' of https://github.com/essentials/Essentials 2011-07-18 05:45:24 +02:00
snowleo fd1256b449 Only show hidden player count, if it's more than 0 2011-07-18 05:45:05 +02:00
snowleo c3235b3694 Merge pull request #14 from khobbits/patch-2
Missing commands in config.yml
2011-07-17 20:37:31 -07:00
snowleo c1c3005454 Fix InventoryWorkaround.addItem() not using the combined list. 2011-07-18 04:59:47 +02:00
snowleo a3c71e4617 Append the event and not the word event to trade log 2011-07-18 04:58:55 +02:00
snowleo 5aa2bc1706 Log location of /sell and signs 2011-07-18 04:49:38 +02:00
snowleo 277c623a77 Missing return in /time reset command 2011-07-18 04:42:10 +02:00
snowleo e37db99c56 Fix player still being in user list after he was deleted. 2011-07-18 03:54:33 +02:00
snowleo be83383fd5 Added option to hide player from /list /who ... login message.
This is for other plugins, that want to hide a player.
Use IEssentials.getUser(Player p).setHidden(boolean)
2011-07-18 03:42:21 +02:00
KHobbits 033151a170 Edited Essentials/src/config.yml via GitHub 2011-07-17 18:09:34 -07:00
snowleo e3a470e264 Split build and use protection 2011-07-18 02:30:05 +02:00
snowleo 1556801834 Protect Rails and other signs from pistons 2011-07-18 01:39:41 +02:00
snowleo e0dc003464 Cleaned deprecated functions 2011-07-18 01:17:24 +02:00
snowleo 81f0ad4d92 Piston push blacklist 2011-07-18 01:05:42 +02:00
snowleo 1ce6be5944 Protection of signs against pistons 2011-07-18 00:50:03 +02:00
snowleo cc31fbed8e Bukkit Permission system
New config setting: use-bukkit-permissions
2011-07-18 00:30:39 +02:00
ementalo 29a15dfe18 CB #1000 Bukkit #700 2011-07-17 22:31:12 +01:00
ementalo 2f00865847 Test #706. essentials.mute.exempt - messages for mute players 2011-07-17 00:13:57 +01:00
ementalo 462fe18b15 Merge branch 'master' of github.com:essentials/Essentials 2011-07-17 00:08:30 +01:00
ementalo 31326d530f essentials.mute.exempt prevents muting, send messages when a player is muted to the muted 2011-07-16 23:53:53 +01:00
snowleo 48230f615d Fixes to EssentialsProtect that will remove conflicts with WorldGuard and other protection plugins. 2011-07-16 17:04:25 +02:00
snowleo 088f50ce8a mute for offline users 2011-07-16 16:52:50 +02:00
snowleo 5ad12b52f8 Register API #8f66f7dcae80945250301a9d9e644a74ab28d0b6
Supports BOSE7
2011-07-16 14:04:30 +02:00
snowleo e6685abe4d Disable old message about iconomy not being enabled before essentials 2011-07-16 05:56:35 +02:00
snowleo f867f675b9 fix kickexempt 2011-07-16 05:55:52 +02:00
snowleo d9bfabd652 Revert to correct class loader 2011-07-16 05:06:08 +02:00
snowleo d9b88a83d1 restricted-commands have been removed from config.yml
Now we have a whitelist: player-commands
2011-07-16 04:05:43 +02:00
snowleo a8fdce257b Log free signs.
We don't how much the user takes out of the free sign, so we log the maximum value.
Also corrected the stack sizes.
2011-07-16 03:51:12 +02:00
snowleo c3a8958046 Colored signs with &0-f
Permissions: essentials.signs.color
2011-07-16 03:23:58 +02:00
snowleo d0345e45b6 Revert broken ban reason for /tempban 2011-07-16 03:11:52 +02:00
snowleo 5ab3422b29 German language file corrections 2011-07-16 02:54:35 +02:00
snowleo 66c4a24852 Fixing the UnitTests 2011-07-16 02:45:12 +02:00
snowleo db27a8c627 Merge branch 'master' of https://github.com/essentials/Essentials 2011-07-16 02:38:46 +02:00
snowleo 78c376af79 Created an interface for settings. 2011-07-16 02:38:22 +02:00
ementalo b749cd4e42 Merge pull request #12 from khobbits/master
Tidy plugins.yml, tidy help.
2011-07-15 17:12:29 -07:00
ementalo a0554f566d This change did not commit 2011-07-16 01:09:28 +01:00
ementalo 1696d7ae71 Test #393 adding optional ban reason with tempban /tempban player time reason, also adding essentials.tempban.exempt 2011-07-16 01:05:11 +01:00
snowleo ad8ad8b574 Fix merge error 2011-07-16 01:35:30 +02:00
snowleo 3c28dabfad Merge branch 'master' of https://github.com/essentials/Essentials 2011-07-16 01:33:33 +02:00
snowleo a38fe6acd4 Heavy cleanup of all classes
ItemDb is not static anymore
Essentials.getStatic() removed
2011-07-16 01:33:22 +02:00
ementalo f104c2e8f6 offline player validation for banning 2011-07-15 22:58:03 +01:00
ementalo 4dc92a144e Merge branch 'master' of github.com:essentials/Essentials 2011-07-15 22:51:43 +01:00
ementalo 1a7b198353 fixing offline player permissions check-ups.
Ban for offline players.
2 new permissions nodes. essentials.ban.exempt and essentials.kick.exempt. People with this permission cannot be banned / kicked
2011-07-15 22:48:42 +01:00
snowleo 25c9557c59 Cleanup of Essentials class
Moved all ban stuff to BanWorkaround
2011-07-15 23:39:56 +02:00
snowleo 963fd7cf01 Fix #682 line numbers of trade signs corrected 2011-07-15 22:02:43 +02:00
KHobbits d7080950b0 Format. 2011-07-15 20:59:40 +01:00
snowleo 9c51f6e177 Test #683
fix for unbreakable sign
2011-07-15 21:58:24 +02:00
KHobbits 39352da929 Adding a failure message for help search 2011-07-15 20:56:58 +01:00
snowleo ad65e66a7c Cleanup of Essentials Block and Player Listeners
Removed old sign code
Moved some jail stuff to the JailPlayerListener
Jail Events now have low priority, so that events are cancelled early.
2011-07-15 21:49:52 +02:00
KHobbits 132ddc323f Adjust the help for more alias' 2011-07-15 20:44:37 +01:00
snowleo 411e96bb18 Fix /time command:
Removed essentials.time.player permission (this is now default)
Added essentials.time.others permission
Admins can now set the time of players
Added reset option, that sets the time of the player to the world time
2011-07-15 21:16:06 +02:00
snowleo 705f9c267c Broadcast message on kick/ban 2011-07-15 20:49:47 +02:00
snowleo d2db6348d9 Moved user.setDisplayName() from EssentialsChat to Essentials
Added new config: change-displayname (default to true)
It allows users to disable the setDisplayName, if they have other plugins that modify the display name
Updated user.getNick() to use StringBuilder
2011-07-15 20:35:09 +02:00
snowleo ae7275c7ad New permission: essentials.sleepingignored 2011-07-15 20:13:52 +02:00
snowleo cecb9867d9 /balance in console for offline users 2011-07-15 20:06:34 +02:00
snowleo 7e65038ae7 Log Protection alerts to the console
Also added the world name, which was missing.
2011-07-15 19:52:29 +02:00
snowleo 37d77f3e89 Disable /unlimited for fire block 2011-07-15 19:38:27 +02:00
snowleo f4ef5a2094 Correct sorting 2011-07-15 19:29:06 +02:00
ementalo af364b4bb4 actually remove sorting methods 2011-07-15 17:50:48 +01:00
ementalo cd4c58cfcb balancetop only braodcasts to the issuer now, fix messages, remove util sortingmethods 2011-07-15 17:47:36 +01:00
ementalo 3898970bba balance top output to chat 2011-07-15 16:15:29 +01:00
ementalo fb8f89e6dc Test #383 added balance top. Hardlimit max of 10 users at the moment. /balancetop retrieves all 10 /balancetop <1-10> retrieves the top number you specify 2011-07-15 15:43:39 +01:00
ementalo 1b0b0b1b57 fix messages when /eco'ing others 2011-07-14 23:27:04 +01:00
ementalo 4c89ef5638 Test #614 fix for socialspy 2011-07-14 22:58:36 +01:00
snowleo 5478a47e25 Signcolors also has High, so we have to use Highest 2011-07-10 14:14:40 -07:00
snowleo 48affa91b0 Fix signcolors bug 2011-07-10 14:11:50 -07:00
ementalo fa2f97760b add thy shears forsooth 2011-07-09 23:48:26 +01:00
ementalo 557ca86ab2 add missing items 2011-07-09 22:52:43 +01:00
ementalo b32d28be37 updated items.csv by necrodoom 2011-07-09 20:26:23 +01:00
ementalo b9b5db8ccd merge went odd 2011-07-09 12:52:46 +01:00
ementalo 7ec1ca651f CB# 974 2011-07-09 12:45:41 +01:00
ementalo 8245adfd08 Merge pull request #11 from khobbits/patch-1
Add support for permissions: in plugin.yml files
2011-07-09 03:36:34 -07:00
KHobbits beea6879b1 Edited Essentials/src/com/earth2me/essentials/commands/Commandhelp.java via GitHub 2011-07-08 19:51:48 -07:00
ementalo e4ba0245be fix take message for ec 2011-07-08 12:49:57 +01:00
ementalo aefbf921fe fixing eco command player argument. must be careful with c&p :/ 2011-07-08 12:38:54 +01:00
ementalo 8a1fb88ecd missed this from checkin oops 2011-07-08 12:29:06 +01:00
ementalo 962b6848c4 /balance offline players. Send message to initiator of eco commands 2011-07-08 12:24:32 +01:00
ementalo 2086b8c978 update signs after trades 2011-07-08 12:00:18 +01:00
ementalo 343291b210 copy and paste argument fix 2011-07-08 10:39:49 +01:00
ementalo 7ed57bc291 /eco offline players 2011-07-08 10:37:40 +01:00
snowleo cb5ab32be6 Set priority to Highest to prevent item dupe with trade signs. 2011-07-08 02:10:42 +02:00
ementalo 244674124b missing translation 2011-07-08 00:06:14 +01:00
ementalo 39770cd46d Test #304 set the location using the setters location, not the players location.
Support for offlline players
2011-07-07 22:24:50 +01:00
ementalo f58fa10686 use full english for disconnect to spare eyeballs 2011-07-07 21:43:44 +01:00
ementalo da8d5454d4 #539 new config . remove-god-on-discon if people discon with godmode on it will be turned off on quit. 2011-07-07 21:37:55 +01:00
ementalo 71c11d05fd remove null check for user in toggle jail. this is handled when we get user 2011-07-07 21:08:42 +01:00
ementalo dab37c7b5b Merge branch 'master' of github.com:essentials/Essentials 2011-07-07 21:05:46 +01:00
ementalo ce14779d2b #571 test jailing offline players. Person needs to have visited the server at least once and have a players.yml file 2011-07-07 21:05:08 +01:00
snowleo a447bc7e66 Return boolean on sendMessage (XMPP) 2011-07-07 21:25:15 +02:00
snowleo 4d3e8332a8 Missing signs in sign list: balance and weather 2011-07-07 19:35:55 +02:00
snowleo 367fcdd029 /spawnmob command: Show error message if EssentialsProtect will prevent spawning of creature. 2011-07-07 19:22:57 +02:00
snowleo 3b838cc23d Fix a bug with temp banning offline users 2011-07-07 19:11:57 +02:00
snowleo f2d9b10e87 New permission: essentials.signs.trade.override
Allows admins to break trade sign of other players.
2011-07-07 19:00:31 +02:00
snowleo fc2c67ceda Merge branch 'master' of https://github.com/essentials/Essentials 2011-07-07 18:54:52 +02:00
snowleo d02380edba Prevent loops generated by logging directly to xmpp 2011-07-07 18:54:25 +02:00
snowleo 3a1d0032c6 Merge pull request #10 from khobbits/master
Fixing help
2011-07-07 07:03:33 -07:00
KHobbits ef37306701 Fixing help 2011-07-07 05:19:11 +01:00
KHobbits 34568ea8fc Merge branch 'master' of github.com:khobbits/Essentials
Conflicts:
	Essentials/src/com/earth2me/essentials/commands/Commandhelp.java
2011-07-07 04:14:50 +01:00
snowleo 56a2398d9b Added a comment to config that the item-spawn-blacklist will be ignored, if permission-based-item-spawn is set to true. 2011-07-06 02:59:16 -07:00
snowleo db03b3c09e Missing config for last commit 2011-07-06 03:13:03 +02:00
snowleo b272374072 Basic logging of trade/buy/sell signs and sell command 2011-07-06 02:58:59 +02:00
snowleo 8afde1ccc0 Fix /realname 2011-07-06 01:55:15 +02:00
snowleo 674128b3f7 Prevent oversized lines on trade signs 2011-07-06 01:39:24 +02:00
snowleo c2936186f8 Now fireball explosion prevention has it's own config settings (was catched by tnt explosion prevention before) 2011-07-06 01:24:54 +02:00
snowleo 5006c68af2 Bounce projectiles, if they are cancelled. 2011-07-06 01:13:03 +02:00
snowleo 526df76ca9 Weather sign 2011-07-06 00:55:05 +02:00
snowleo e92aeee91b Run the sign break event with the lowest priority, so it won't restore if other plugins cancel the event. 2011-07-06 00:14:06 +02:00
snowleo f2107047da Set sleeping ignored for afk players & disable afk mode on login 2011-07-06 00:05:44 +02:00
snowleo f280985dd6 Merge branch 'master' of https://github.com/essentials/Essentials 2011-07-05 23:50:50 +02:00
snowleo f610dd9c72 Limiting the amount of money a player can have.
The maximum limit is 10 trillions.
2011-07-05 23:50:31 +02:00
snowleo 7e4cbd7b26 Merge pull request #9 from khobbits/patch-2
essentials.back.ondeath would be useless without essentials.back
2011-07-05 08:06:03 -07:00
KHobbits ffd1154ca3 essentials.back.ondeath would be useless without essentials.back 2011-07-03 06:58:20 -07:00
ementalo 7f4ba16388 fixes #654 - user is no longer afk on chat or command use 2011-07-03 00:05:46 +01:00
ementalo 66dafdca0d Merge branch 'master' of github.com:essentials/Essentials 2011-07-02 23:54:43 +01:00
ementalo 3a8b888e7c fixes #475. User is no longer afk if they move. others can set afk /afk playername. needs essentials.afk.others 2011-07-02 23:53:54 +01:00
snowleo ed1aa2f9dc Added softdepend: Factions to EssentialsChat 2011-07-02 15:42:28 -07:00
snowleo 4eb94e7fac Merge pull request #8 from Brettflan/master
Implemented Factions plugin hooks to EssentialsChat for proper chat integration between them (master/dev branch)
2011-07-02 15:41:17 -07:00
Brettflan 16b101b958 Implemented Factions hooks for proper chat integration with it (master/dev branch) 2011-07-02 17:34:49 -05:00
snowleo ff8564787a Edited README.markdown via GitHub 2011-07-02 15:12:43 -07:00
snowleo 6616d9a62f Merge pull request #6 from khobbits/patch-1
Updated groups.yml
2011-07-02 14:57:45 -07:00
snowleo ae053dea58 Prevent signs created by plugins like SignColours 2011-07-02 13:16:44 +02:00
snowleo 335c9f37ab Fix: No cooldown for all /tpo commands
TP-Delay: Player can move around roughly in the 9 blocks surrounding them.
2011-07-02 13:12:10 +02:00
snowleo 914a44007d Update of bukkit version number in essentials class 2011-07-02 01:13:44 +02:00
snowleo bbd10b90c0 CB# 953
B# 754
2011-07-02 01:12:59 +02:00
snowleo 5ae0ab745f More names for pistons (items.csv)
Fix for /unlimited and pistons
2011-07-01 10:58:50 +02:00
snowleo ecaecc5e62 Fix Protection signs 2011-07-01 01:33:35 +02:00
snowleo e596f85953 Fix Trade signs 2011-07-01 01:33:09 +02:00
snowleo aef2ca3e5d Fix Groups for warp signs 2011-07-01 01:32:49 +02:00
snowleo bd7a50ad07 Always cancel interact with sign. 2011-07-01 01:32:13 +02:00
snowleo 5346b112a4 Don't add items with an amount of 0 or lower to the inventory. 2011-07-01 01:31:20 +02:00
snowleo d95d7745ad Fix for a bug in getTrade() of Signs that would return the quantity of items as money. 2011-06-30 23:27:00 +02:00
snowleo 6c9a57d4b3 Don't place a block, if interacting with a sign. 2011-06-30 22:57:39 +02:00
snowleo 60235d0da4 Only act on right click, otherwise signs can't be destroyed. 2011-06-30 22:55:00 +02:00
snowleo 995f18bb0f Fix: Blocks can't be broken. 2011-06-30 22:50:22 +02:00
snowleo a720bf33ce Updated items.csv 2011-06-30 19:17:58 +02:00
snowleo 0f87670991 CB #946
B #750
2011-06-30 18:57:36 +02:00
KHobbits 016defd043 Query:
- does essentials.back.ondeath work without essentials.back, and vice versa?
- should we swap signs.protection.override? to signs.override.protection?
2011-06-29 02:33:11 -07:00
ementalo 2aa88d05cf Updating for huge renames in #939 2011-06-28 23:32:30 +01:00
ementalo c530030e5d sethome for others, missed from commit 2011-06-28 10:13:18 +01:00
ementalo 48e0073b31 admin can set others homes. needs "essentials.sethome.others" permission 2011-06-28 10:10:29 +01:00
ementalo ce6d5596aa move socialspy handler to commandpreprocess 2011-06-28 09:29:40 +01:00
snowleo 8f32d66e03 Another fix to /spawnmob 2011-06-27 11:46:57 +02:00
snowleo 1c11ab0957 Fix Mop spawning 2011-06-26 18:15:20 +02:00
snowleo fafd9b20a9 Renamed getInteger method name to getIntegerPositive. 2011-06-26 18:14:59 +02:00
snowleo a6d60dbc94 Deprecating the old sign code and adding the new code.
Please test everything without EssentialsProtect. The signs should protect themselves.
2011-06-26 16:17:45 +02:00
snowleo fa5d6fbfae Missing onBlockPlace event for Protection sign 2011-06-26 16:06:19 +02:00
snowleo 88ded926f4 Corrected all commands of PermCommands
onCommand now supports the change of the permissions prefix
2011-06-26 15:47:28 +02:00
snowleo 3b9a07e560 Protection signs and
new Listeners for the signs
2011-06-26 15:31:13 +02:00
snowleo 512a1b9183 Corrected the output of /gc
It's now max, total and free
2011-06-26 12:16:50 +02:00
snowleo fb834bf104 Fix: Player was unable to use any commands, if his money was negative. 2011-06-25 22:23:11 +02:00
snowleo 953ce38d63 Updated bukkit version number in Essentials class 2011-06-25 16:46:41 +02:00
snowleo ca29f18850 Cleanup of KHobbits commit 2011-06-25 16:46:02 +02:00
KHobbits 503b4fee55 Searchable help.
Toggle commands with no permissions.
2011-06-25 22:39:46 +08:00
snowleo b7cb11cd95 Remove the restriction of EssEcoApi to not use iConomy or BOSE 2011-06-25 15:34:33 +02:00
snowleo cfa8b8e2f4 Same in messages.properties 2011-06-25 15:19:45 +02:00
snowleo 70621e3eff Merge pull request #3 from khobbits/patch-1
Fixing Typo in messages_en.properties
2011-06-25 06:18:13 -07:00
snowleo 0731580cc9 Don't connect to example.com, the default value 2011-06-25 15:17:10 +02:00
snowleo 8bb3a76366 Merge branch 'bukkitupdate' 2011-06-25 15:00:08 +02:00
KHobbits 209a9a2f95 Searchable help.
Toggle commands with no permissions.
2011-06-24 15:29:49 +01:00
KHobbits d50d8bfee0 Fixing Typo 2011-06-24 15:25:08 +01:00
KHobbits b0e606568f Fixing Typo 2011-06-24 05:13:37 -07:00
snowleo 22ea5b0f8b More permissions that should be restricted to ops 2011-06-23 20:44:18 +02:00
snowleo 6676efe029 Fix /spawner command
The name had to be first letter uppercase, the rest lowercase
2011-06-23 20:14:59 +02:00
snowleo 6b360da8d8 Cleanup 2011-06-23 19:34:51 +02:00
snowleo 198b205d83 Fix unbreakable blocks 2011-06-23 15:57:52 +02:00
snowleo b9e56d100c /antioch now uses bukkit code 2011-06-23 15:02:05 +02:00
snowleo 0a924bf226 Cleanup 2011-06-23 14:58:37 +02:00
snowleo 2ea5e6c03b Better /nuke command, now accepts playernames as argument 2011-06-23 14:58:26 +02:00
snowleo efaed85188 New command /fireball 2011-06-23 14:14:24 +02:00
snowleo c378d98b0f Updated /spawnmob to use bukkit code
Less code that breaks with future minecraft updates.
2011-06-23 14:10:27 +02:00
snowleo 9d6727daf2 Merge branch 'bukkitupdate'
Conflicts:
	EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java
2011-06-23 13:49:37 +02:00
snowleo c6aa5f1e68 Check java version to be at least 1.6 2011-06-23 12:38:21 +02:00
snowleo a16ced78a5 Merge branch 'master' of https://github.com/essentials/Essentials 2011-06-23 12:23:42 +02:00
snowleo cdea68443a Only get data from valid rows
Fixes #641
2011-06-23 12:22:52 +02:00
jessenic e24c053b95 Adding a command deprecated notice for players 2011-06-22 07:44:01 +08:00
jessenic 798d4458d4 Deleting my name xD 2011-06-22 07:44:01 +08:00
jessenic a228708138 Fixing typo in EssentialsPermissionsCommands plugin.yml. And adding my name there :P 2011-06-22 07:44:00 +08:00
snowleo 5d8f5cecee Translation error (german) 2011-06-19 13:09:29 +02:00
snowleo 34f650e270 Moved some code from EssentialsSign to SignTrade, because it's only needed there. 2011-06-13 15:15:19 +02:00
snowleo 49bdf5719e Trade sign 2011-06-13 15:05:31 +02:00
snowleo fd2d2456b9 Renamed the Charge class to Trade 2011-06-13 15:05:11 +02:00
snowleo adc7502115 Use the new Workaround in buy signs. 2011-06-12 22:58:37 +02:00
snowleo 631c7f30b6 Workaround methods are static 2011-06-12 22:57:43 +02:00
snowleo 46cba7a9a7 Use the correct maxStackSize, when adding things to the inventory. 2011-06-12 22:55:08 +02:00
snowleo 246383804a Limit buy signs amount to a full inventory of a player. 2011-06-12 22:40:25 +02:00
snowleo 32bbe877aa Sell & Buy Sign 2011-06-12 22:33:47 +02:00
snowleo 0eee5acac7 To make things consistent:
permissions: essentials.signs.break.signname and essentials.signs.signname.break
2011-06-12 21:58:09 +02:00
snowleo 7d112a957c Updated french translation by Nelo 2011-06-12 18:41:50 +02:00
snowleo 76c06ce17a Correct header 2011-06-12 18:31:33 +02:00
snowleo 350a951e8b Sort all messages, so diffs are easier. 2011-06-12 18:30:24 +02:00
snowleo 6cc742b139 Fix for calling command for plugins that are loaded after Essentials. 2011-06-12 17:52:46 +02:00
snowleo ebc56c0e15 Prevent lava bucket placed in air (far away from user)
event.isCancelled() does not return the expected value
2011-06-12 16:15:50 +02:00
snowleo f0c503dd13 Another missing part 2011-06-12 14:54:56 +02:00
snowleo bfa8b26661 The permission is essentials.protect.ownerinfo 2011-06-12 14:32:28 +02:00
snowleo 772bf4c7d0 Merge branch 'master' of https://github.com/essentials/Essentials 2011-06-12 02:48:50 +02:00
snowleo edefb21142 Fix for Craftbukkit Bug 912 2011-06-12 02:47:50 +02:00
ementalo 01f69b3f2b Protect: Remove protection when attached block is destroyed 2011-06-11 16:05:14 +01:00
snowleo 26c9b34744 Merge branch 'master' of https://github.com/essentials/Essentials 2011-06-11 13:03:10 +02:00
snowleo dfad01d558 Merge branch 'release'
Conflicts:
	.gitignore
	lib/bukkit-0.0.1-SNAPSHOT.jar
2011-06-11 13:02:34 +02:00
ementalo b974410dd9 Protect: Get block owners on right click block only 2011-06-11 08:37:05 +01:00
snowleo d01e2e0a3b Merge pull request #2 from khobbits/master
gm aliases
2011-06-08 17:28:01 -07:00
KHobbits 5a544fd251 Adding group permission alias 2011-06-08 17:41:48 +01:00
KHobbits f5fac6f9f5 Adding user permission alias 2011-06-08 17:36:43 +01:00
KHobbits 5d925aa338 Adding manload 2011-06-08 17:32:37 +01:00
KHobbits 8136179e55 Adding some GM aliases 2011-06-08 17:20:51 +01:00
snowleo dea44d7cbc Catch NumberFormatException 2011-06-08 03:44:16 +02:00
snowleo e0597f2df1 Cleanup 2011-06-08 03:40:00 +02:00
snowleo 99268b9d9e The sign permissions will be:
essentials.signs.create.*
essentials.signs.use.*
essentials.signs.break.*
2011-06-08 03:30:32 +02:00
snowleo bcf81d9f0a Refactoring of the signs
Todo: Eco signs, Protection signs

New permission: essentials.signs.[signname].break
2011-06-08 03:18:33 +02:00
snowleo 775c8d34dd Added developer readme and settings. 2011-06-07 23:01:28 +02:00
snowleo 75973f69a5 Fix save inventory after logout for new players. 2011-06-07 22:18:57 +02:00
snowleo f04b7133eb Remove unused imports 2011-06-07 22:17:55 +02:00
snowleo b1446154bf Fix dependency
Loading from lib won't work, so back to the old method.
2011-06-07 21:55:31 +02:00
snowleo 640f51564a The rest of Wundarks commit, cleaned 2011-06-07 01:55:39 +02:00
Wundark 5c258c03dc Added [Time] Sign 2011-06-07 07:46:42 +08:00
Wundark bc8aa0c77a Changed MOTD 2011-06-07 07:33:13 +08:00
snowleo cc18f95bc9 Merge branch 'permissions3' 2011-06-07 01:23:37 +02:00
snowleo 9e5c64ae9c ignore build directories 2011-06-07 01:23:07 +02:00
snowleo 7bbb62ce50 Fix the tests. 2011-06-07 01:11:00 +02:00
snowleo d8a81923b1 Only import what we really need. 2011-06-07 01:08:31 +02:00
snowleo 1321f8de5d Bukkit #704 2011-06-07 01:07:16 +02:00
snowleo 4bfc8e1459 Cleanup
/manuadd command
2011-06-07 00:54:36 +02:00
snowleo 4f16c8b5a7 Permissions 3.1.4
Added Code for Perm2, Perm3 and Config Permissions
Cleaned EssentialsChat
2011-06-07 00:24:39 +02:00
snowleo a45e620946 Major cleanup of the Protect code 2011-06-06 22:29:08 +02:00
snowleo d877880171 Ignore all build files 2011-06-06 14:16:56 +02:00
snowleo a91aeb1a76 gitignore for .DS_Store files 2011-06-06 12:08:54 +00:00
snowleo b7791caa75 cleanup
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1593 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-06 12:06:41 +00:00
snowleo 6c862e72b5 cleanup
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1592 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-06 12:04:37 +00:00
snowleo 710088fb13 cleanup
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1591 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-06 12:02:33 +00:00
snowleo 198607d425 Cleaned InventoryWorkaround
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1590 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-06 12:01:56 +00:00
snowleo 4bbc2aa8d5 Rewrote TargetBlock
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1589 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-06 12:01:23 +00:00
snowleo c038751c0b Pull-Request #1 by mrapple
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1588 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-05 23:56:52 +00:00
ementalo f1b544a96f [trunk] Protect, add missing listener
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1587 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-05 21:36:47 +00:00
ementalo 9a4ef7cd20 [trunk] Protect, more merges
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1586 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-05 19:09:29 +00:00
snowleo bc3d8d5ece NPE fix for offline users in UserData
That one was correct, otherwise the inventory will be deleted by offline changes.

git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1585 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-05 00:03:44 +00:00
snowleo 1751baeed6 NPE fix for offline users in UserData
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1584 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-05 00:01:15 +00:00
snowleo 7b825cc8d5 NPE fix for offline users in UserData
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1583 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-05 00:00:41 +00:00
ementalo a005436510 [trunk] Protect, move some bits about
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1582 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-03 21:03:08 +00:00
ementalo 541fc51780 [trunk] Protect, merging changes in
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1581 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-03 20:56:29 +00:00
snowleo aef2dd35d6 Fix Spawner
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1580 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-03 20:11:20 +00:00
ementalo e94a01b149 [trunk] Adding dependancy checker, need to fix timings as Protect tries to use it before the file system finishes
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1579 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-03 14:23:55 +00:00
ementalo 1a572bca2e [trunk] Fix the build, bundling the c3p0 jar inside protect for the moment
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1578 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-03 07:57:35 +00:00
snowleo 5a47d18a9b Fixes for XMPP: Prevent loops on errors
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1577 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-03 03:57:41 +00:00
snowleo 991a5cb24c Fixes for XMPP: display minecraft username for players that have set their address using /setxmpp, others will have the jabber address next to the message
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1576 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-03 02:22:32 +00:00
snowleo e8e97e86a0 Fixes for XMPP: display message on /setxmpp, ignore resource on xmpp addresses, reconnect on reload
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1575 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-03 01:50:40 +00:00
ementalo f6cedda1e2 [trunk] Protect refactors (formally known as 3.0) needs ***EXTENSIVE*** testing
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1574 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 23:09:59 +00:00
ementalo 3dab3d8df8 [trunk] fix class not found
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1573 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 22:01:57 +00:00
snowleo 3e359b5b48 Code cleanup
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1572 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 14:23:50 +00:00
snowleo 09e17a4d6c timePattern for dutch translation
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1571 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 14:04:24 +00:00
snowleo 651b89d97b More cleanup
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1570 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 13:59:02 +00:00
snowleo 0ff89abeee Code cleanup
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1569 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 13:49:58 +00:00
snowleo 8ba3e3c2f9 Stupid Netbeans is stupid.
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1568 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 13:31:52 +00:00
snowleo e53ce03d36 Missing file for EssentialsXMPP
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1566 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 13:25:57 +00:00
snowleo aeb3b0f37c Smack 3.2.0
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1565 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 13:24:51 +00:00
snowleo 2d038579ba Added EssentialsXMPP from newplugins branch.
Updated to work with trunk.

git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1564 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 13:24:26 +00:00
snowleo ba86a338c2 Cleanup
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1563 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 13:22:24 +00:00
snowleo 1bcc2e6e50 items.csv by necrodoom
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1562 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 11:50:17 +00:00
snowleo 797dde94e1 May death rain upon them
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1561 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 11:43:25 +00:00
ementalo b83bb1faa3 Dutch translations by Geertje123
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1560 e251c2fe-e539-e718-e476-b85c1f46cddb
2011-06-02 11:26:58 +00:00
642 changed files with 58682 additions and 22110 deletions

No files matched your search

+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="lib/bukkit-0.0.1-SNAPSHOT.jar"/>
<classpathentry kind="lib" path="lib/craftbukkit-0.0.1-SNAPSHOT.jar"/>
<classpathentry kind="lib" path="lib/Permissions3.jar"/>
</classpath>
+23 -1
View File
@@ -22,4 +22,26 @@
/EssentialsXMPP/dist/
/EssentialsXMPP/build/
/EssentialsProtect/dist/
/EssentialsProtect/build/
/EssentialsProtect/build/
/EssentialsPermissionsCommands/nbproject/private/
/EssentialsPermissionsCommands/build/
/EssentialsPermissionsCommands/dist/
/Essentials/nbproject/private/
/Essentials/dist/
/Essentials/build/
/YamlAnnotations/
/EssentialsUpdate/nbproject/private/
/EssentialsRelease/
/EssentialsUpdate/dist/
/EssentialsUpdate/build/
/WebPush/apikey.php
/WebPush/nbproject/private
/.idea
*.iml
/EssentialsSigns/nbproject/private/
/Essentials2Compat/nbproject/private/
/Essentials2Compat/dist/
/Essentials2Compat/build/
/EssentialsGroupManager/bin
/EssentialsGroupManager/.externalToolBuilders
/EssentialsGeoIP/build
+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Essentials</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
+30 -4
View File
@@ -20,10 +20,10 @@ is divided into following sections:
-->
<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="BuildAll-impl">
<fail message="Please build using Ant 1.7.1 or higher.">
<fail message="Please build using Ant 1.8.0 or higher.">
<condition>
<not>
<antversion atleast="1.7.1"/>
<antversion atleast="1.8.0"/>
</not>
</condition>
</fail>
@@ -223,6 +223,7 @@ is divided into following sections:
<property name="javac.fork" value="${jdkBug6558476}"/>
<property name="jar.index" value="false"/>
<property name="jar.index.metainf" value="${jar.index}"/>
<property name="copylibs.rebase" value="true"/>
<available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>
</target>
<target name="-post-init">
@@ -409,6 +410,7 @@ is divided into following sections:
<property environment="env"/>
<resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>
<java classname="@{classname}" dir="${profiler.info.dir}" fork="true" jvm="${profiler.info.jvm}">
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
<jvmarg value="${profiler.info.jvmargs.agent}"/>
<jvmarg line="${profiler.info.jvmargs}"/>
<env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
@@ -539,7 +541,7 @@ is divided into following sections:
</chainedmapper>
</pathconvert>
<taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
<copylibs compress="${jar.compress}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
<copylibs compress="${jar.compress}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" rebase="${copylibs.rebase}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
<fileset dir="${build.classes.dir}"/>
<manifest>
<attribute name="Class-Path" value="${jar.classpath}"/>
@@ -650,6 +652,13 @@ is divided into following sections:
<param name="call.target" value="jar"/>
<param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
</antcall>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-jar.properties}"/>
<param location="${project.EssentialsXMPP}" name="call.subproject"/>
<param location="${project.EssentialsXMPP}/build.xml" name="call.script"/>
<param name="call.target" value="jar"/>
<param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
</antcall>
</target>
<target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
<target depends="init" name="-check-automatic-build">
@@ -913,16 +922,26 @@ is divided into following sections:
-->
<target depends="init" if="have.sources" name="-javadoc-build">
<mkdir dir="${dist.javadoc.dir}"/>
<condition else="" property="javadoc.endorsed.classpath.cmd.line.arg" value="-J${endorsed.classpath.cmd.line.arg}">
<and>
<isset property="endorsed.classpath.cmd.line.arg"/>
<not>
<equals arg1="${endorsed.classpath.cmd.line.arg}" arg2=""/>
</not>
</and>
</condition>
<javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
<classpath>
<path path="${javac.classpath}"/>
</classpath>
<fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
<fileset dir="${src.dir}" excludes="*.java,${excludes}" includes="${includes}">
<filename name="**/*.java"/>
</fileset>
<fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
<include name="**/*.java"/>
<exclude name="*.java"/>
</fileset>
<arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>
</javadoc>
<copy todir="${dist.javadoc.dir}">
<fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
@@ -1135,6 +1154,13 @@ is divided into following sections:
<param name="call.target" value="clean"/>
<param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
</antcall>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-clean.properties}"/>
<param location="${project.EssentialsXMPP}" name="call.subproject"/>
<param location="${project.EssentialsXMPP}/build.xml" name="call.script"/>
<param name="call.target" value="clean"/>
<param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
</antcall>
</target>
<target depends="init" name="-do-clean">
<delete dir="${build.dir}"/>
+5 -5
View File
@@ -1,8 +1,8 @@
build.xml.data.CRC32=c4188209
build.xml.data.CRC32=51b33957
build.xml.script.CRC32=7a797370
build.xml.stylesheet.CRC32=28e38971@1.43.1.45
build.xml.stylesheet.CRC32=28e38971@1.44.1.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=c4188209
nbproject/build-impl.xml.script.CRC32=73a4865f
nbproject/build-impl.xml.stylesheet.CRC32=0c01fd8e@1.43.1.45
nbproject/build-impl.xml.data.CRC32=51b33957
nbproject/build-impl.xml.script.CRC32=c5170bed
nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
+46 -10
View File
@@ -3,7 +3,42 @@ annotation.processing.enabled.in.editor=false
annotation.processing.run.all.processors=true
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
application.title=BuildAll
application.vendor=Paul
application.vendor=
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=2
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=2
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=2
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=120
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap=none
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=project
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineAnnotationArgs=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineArrayInit=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineAssignment=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineBinaryOp=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineCallArgs=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineDisjunctiveCatchTypes=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineFor=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineImplements=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineMethodParams=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineParenthesized=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineTernaryOp=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineThrows=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineTryResources=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader=0
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesBeforeClass=2
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement=NEW_LINE
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs=false
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width=4
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indentCasesFromSwitch=false
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement=NEW_LINE
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement=NEW_LINE
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceAfterTypeCast=false
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab=4
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size=4
build.classes.dir=${build.dir}/classes
build.classes.excludes=**/*.java,**/*.form
# This directory is removed when the project is cleaned:
@@ -27,27 +62,26 @@ dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath=
excludes=
includes=**
jar.compress=false
jar.compress=true
javac.classpath=\
${reference.Essentials.jar}:\
${reference.EssentialsChat.jar}:\
${reference.EssentialsGroupBridge.jar}:\
${reference.EssentialsGroupManager.jar}:\
${reference.EssentialsProtect.jar}:\
${reference.EssentialsSpawn.jar}:\
${reference.EssentialsGeoIP.jar}
${reference.EssentialsGeoIP.jar}:\
${reference.EssentialsGroupBridge.jar}:\
${reference.EssentialsXMPP.jar}:\
${reference.EssentialsGroupManager.jar}
# Space-separated list of extra javac options
javac.compilerargs=
javac.deprecation=false
javac.processorpath=\
${javac.classpath}
javac.source=1.5
javac.target=1.5
javac.source=1.6
javac.target=1.6
javac.test.classpath=\
${javac.classpath}:\
${build.classes.dir}:\
${libs.junit.classpath}:\
${libs.junit_4.classpath}
${build.classes.dir}
javac.test.processorpath=\
${javac.test.classpath}
javadoc.additionalparam=
@@ -71,6 +105,7 @@ project.EssentialsGroupBridge=../EssentialsGroupBridge
project.EssentialsGroupManager=../EssentialsGroupManager
project.EssentialsProtect=../EssentialsProtect
project.EssentialsSpawn=../EssentialsSpawn
project.EssentialsXMPP=../EssentialsXMPP
reference.Essentials.jar=${project.Essentials}/dist/Essentials.jar
reference.EssentialsChat.jar=${project.EssentialsChat}/dist/EssentialsChat.jar
reference.EssentialsGeoIP.jar=${project.EssentialsGeoIP}/dist/EssentialsGeoIP.jar
@@ -78,6 +113,7 @@ reference.EssentialsGroupBridge.jar=${project.EssentialsGroupBridge}/dist/Essent
reference.EssentialsGroupManager.jar=${project.EssentialsGroupManager}/dist/EssentialsGroupManager.jar
reference.EssentialsProtect.jar=${project.EssentialsProtect}/dist/EssentialsProtect.jar
reference.EssentialsSpawn.jar=${project.EssentialsSpawn}/dist/EssentialsSpawn.jar
reference.EssentialsXMPP.jar=${project.EssentialsXMPP}/dist/EssentialsXMPP.jar
run.classpath=\
${javac.classpath}:\
${build.classes.dir}
+8
View File
@@ -71,6 +71,14 @@
<clean-target>clean</clean-target>
<id>jar</id>
</reference>
<reference>
<foreign-project>EssentialsXMPP</foreign-project>
<artifact-type>jar</artifact-type>
<script>build.xml</script>
<target>jar</target>
<clean-target>clean</clean-target>
<id>jar</id>
</reference>
</references>
</configuration>
</project>
-7
View File
@@ -1,7 +0,0 @@
# NetBeans cruft
/build
/dist
/nbproject/private
# Mac cruft
.DS_Store
+84 -84
View File
@@ -1,84 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See commented blocks below for -->
<!-- some examples of how to customize the build. -->
<!-- (If you delete it and reopen the project it will be recreated.) -->
<!-- By default, only the Clean and Build commands use this build script. -->
<!-- Commands such as Run, Debug, and Test only use this build script if -->
<!-- the Compile on Save feature is turned off for the project. -->
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
<!-- in the project's Project Properties dialog box.-->
<project name="Essentials" default="default" basedir=".">
<description>Builds, tests, and runs the project Essentials.</description>
<import file="nbproject/build-impl.xml"/>
<!--
There exist several targets which are by default empty and which can be
used for execution of your tasks. These targets are usually executed
before and after some main targets. They are:
-pre-init: called before initialization of project properties
-post-init: called after initialization of project properties
-pre-compile: called before javac compilation
-post-compile: called after javac compilation
-pre-compile-single: called before javac compilation of single file
-post-compile-single: called after javac compilation of single file
-pre-compile-test: called before javac compilation of JUnit tests
-post-compile-test: called after javac compilation of JUnit tests
-pre-compile-test-single: called before javac compilation of single JUnit test
-post-compile-test-single: called after javac compilation of single JUunit test
-pre-jar: called before JAR building
-post-jar: called after JAR building
-post-clean: called after cleaning build products
(Targets beginning with '-' are not intended to be called on their own.)
Example of inserting an obfuscator after compilation could look like this:
<target name="-post-compile">
<obfuscate>
<fileset dir="${build.classes.dir}"/>
</obfuscate>
</target>
For list of available properties check the imported
nbproject/build-impl.xml file.
Another way to customize the build is by overriding existing main targets.
The targets of interest are:
-init-macrodef-javac: defines macro for javac compilation
-init-macrodef-junit: defines macro for junit execution
-init-macrodef-debug: defines macro for class debugging
-init-macrodef-java: defines macro for class execution
-do-jar-with-manifest: JAR building (if you are using a manifest)
-do-jar-without-manifest: JAR building (if you are not using a manifest)
run: execution of project
-javadoc-build: Javadoc generation
test-report: JUnit report generation
An example of overriding the target for project execution could look like this:
<target name="run" depends="Essentials-impl.jar">
<exec dir="bin" executable="launcher.exe">
<arg file="${dist.jar}"/>
</exec>
</target>
Notice that the overridden target depends on the jar target and not only on
the compile target as the regular run target does. Again, for a list of available
properties which you can use, check the target you are overriding in the
nbproject/build-impl.xml file.
-->
<!--target name="-post-jar">
<jar jarfile="${dist.dir}/Essentials.jar">
<zipfileset src="${dist.jar}" excludes="META-INF/*" />
<zipfileset src="${dist.dir}/lib/Register.jar" excludes="META-INF/*" />
<manifest>
<attribute name="Classpath" value="Essentials.jar"/>
</manifest>
</jar>
</target-->
</project>
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See commented blocks below for -->
<!-- some examples of how to customize the build. -->
<!-- (If you delete it and reopen the project it will be recreated.) -->
<!-- By default, only the Clean and Build commands use this build script. -->
<!-- Commands such as Run, Debug, and Test only use this build script if -->
<!-- the Compile on Save feature is turned off for the project. -->
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
<!-- in the project's Project Properties dialog box.-->
<project name="Essentials" default="default" basedir=".">
<description>Builds, tests, and runs the project Essentials.</description>
<import file="nbproject/build-impl.xml"/>
<!--
There exist several targets which are by default empty and which can be
used for execution of your tasks. These targets are usually executed
before and after some main targets. They are:
-pre-init: called before initialization of project properties
-post-init: called after initialization of project properties
-pre-compile: called before javac compilation
-post-compile: called after javac compilation
-pre-compile-single: called before javac compilation of single file
-post-compile-single: called after javac compilation of single file
-pre-compile-test: called before javac compilation of JUnit tests
-post-compile-test: called after javac compilation of JUnit tests
-pre-compile-test-single: called before javac compilation of single JUnit test
-post-compile-test-single: called after javac compilation of single JUunit test
-pre-jar: called before JAR building
-post-jar: called after JAR building
-post-clean: called after cleaning build products
(Targets beginning with '-' are not intended to be called on their own.)
Example of inserting an obfuscator after compilation could look like this:
<target name="-post-compile">
<obfuscate>
<fileset dir="${build.classes.dir}"/>
</obfuscate>
</target>
For list of available properties check the imported
nbproject/build-impl.xml file.
Another way to customize the build is by overriding existing main targets.
The targets of interest are:
-init-macrodef-javac: defines macro for javac compilation
-init-macrodef-junit: defines macro for junit execution
-init-macrodef-debug: defines macro for class debugging
-init-macrodef-java: defines macro for class execution
-do-jar-with-manifest: JAR building (if you are using a manifest)
-do-jar-without-manifest: JAR building (if you are not using a manifest)
run: execution of project
-javadoc-build: Javadoc generation
test-report: JUnit report generation
An example of overriding the target for project execution could look like this:
<target name="run" depends="Essentials-impl.jar">
<exec dir="bin" executable="launcher.exe">
<arg file="${dist.jar}"/>
</exec>
</target>
Notice that the overridden target depends on the jar target and not only on
the compile target as the regular run target does. Again, for a list of available
properties which you can use, check the target you are overriding in the
nbproject/build-impl.xml file.
-->
<!--target name="-post-jar">
<jar jarfile="${dist.dir}/Essentials.jar">
<zipfileset src="${dist.jar}" excludes="META-INF/*" />
<zipfileset src="${dist.dir}/lib/Register.jar" excludes="META-INF/*" />
<manifest>
<attribute name="Classpath" value="Essentials.jar"/>
</manifest>
</jar>
</target-->
</project>
+30 -4
View File
@@ -20,10 +20,10 @@ is divided into following sections:
-->
<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="Essentials-impl">
<fail message="Please build using Ant 1.7.1 or higher.">
<fail message="Please build using Ant 1.8.0 or higher.">
<condition>
<not>
<antversion atleast="1.7.1"/>
<antversion atleast="1.8.0"/>
</not>
</condition>
</fail>
@@ -223,6 +223,7 @@ is divided into following sections:
<property name="javac.fork" value="${jdkBug6558476}"/>
<property name="jar.index" value="false"/>
<property name="jar.index.metainf" value="${jar.index}"/>
<property name="copylibs.rebase" value="true"/>
<available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>
</target>
<target name="-post-init">
@@ -409,6 +410,7 @@ is divided into following sections:
<property environment="env"/>
<resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>
<java classname="@{classname}" dir="${profiler.info.dir}" fork="true" jvm="${profiler.info.jvm}">
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
<jvmarg value="${profiler.info.jvmargs.agent}"/>
<jvmarg line="${profiler.info.jvmargs}"/>
<env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
@@ -539,7 +541,7 @@ is divided into following sections:
</chainedmapper>
</pathconvert>
<taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
<copylibs compress="${jar.compress}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
<copylibs compress="${jar.compress}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" rebase="${copylibs.rebase}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
<fileset dir="${build.classes.dir}"/>
<manifest>
<attribute name="Class-Path" value="${jar.classpath}"/>
@@ -601,6 +603,13 @@ is divided into following sections:
<propertyfile file="${built-jar.properties}">
<entry key="${basedir}" value=""/>
</propertyfile>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-jar.properties}"/>
<param location="${project.EssentialsGroupManager}" name="call.subproject"/>
<param location="${project.EssentialsGroupManager}/build.xml" name="call.script"/>
<param name="call.target" value="jar"/>
<param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
</antcall>
</target>
<target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
<target depends="init" name="-check-automatic-build">
@@ -864,16 +873,26 @@ is divided into following sections:
-->
<target depends="init" if="have.sources" name="-javadoc-build">
<mkdir dir="${dist.javadoc.dir}"/>
<condition else="" property="javadoc.endorsed.classpath.cmd.line.arg" value="-J${endorsed.classpath.cmd.line.arg}">
<and>
<isset property="endorsed.classpath.cmd.line.arg"/>
<not>
<equals arg1="${endorsed.classpath.cmd.line.arg}" arg2=""/>
</not>
</and>
</condition>
<javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
<classpath>
<path path="${javac.classpath}"/>
</classpath>
<fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
<fileset dir="${src.dir}" excludes="*.java,${excludes}" includes="${includes}">
<filename name="**/*.java"/>
</fileset>
<fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
<include name="**/*.java"/>
<exclude name="*.java"/>
</fileset>
<arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>
</javadoc>
<copy todir="${dist.javadoc.dir}">
<fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
@@ -1037,6 +1056,13 @@ is divided into following sections:
<propertyfile file="${built-clean.properties}">
<entry key="${basedir}" value=""/>
</propertyfile>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-clean.properties}"/>
<param location="${project.EssentialsGroupManager}" name="call.subproject"/>
<param location="${project.EssentialsGroupManager}/build.xml" name="call.script"/>
<param name="call.target" value="clean"/>
<param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
</antcall>
</target>
<target depends="init" name="-do-clean">
<delete dir="${build.dir}"/>
+3 -3
View File
@@ -3,9 +3,9 @@ build.xml.script.CRC32=3233ee78
build.xml.stylesheet.CRC32=28e38971@1.38.2.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=4b596d89
nbproject/build-impl.xml.script.CRC32=4926001b
nbproject/build-impl.xml.stylesheet.CRC32=0c01fd8e@1.43.1.45
nbproject/build-impl.xml.data.CRC32=a830bc14
nbproject/build-impl.xml.script.CRC32=a9f8842a
nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
nbproject/profiler-build-impl.xml.data.CRC32=ab78ce15
nbproject/profiler-build-impl.xml.script.CRC32=abda56ed
nbproject/profiler-build-impl.xml.stylesheet.CRC32=f10cf54c@1.11.1
+2
View File
@@ -1 +1,3 @@
DoNotUseThreads
LongVariable
SignatureDeclareThrowsException
+88 -16
View File
@@ -1,9 +1,47 @@
annotation.processing.enabled=true
annotation.processing.enabled.in.editor=false
annotation.processing.run.all.processors=true
annotation.processing.processors.list=lombok.core.AnnotationProcessor
annotation.processing.run.all.processors=false
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
application.title=Essentials
application.vendor=Paul
application.vendor=
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=2
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=2
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=2
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=120
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap=none
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=project
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineAnnotationArgs=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineArrayInit=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineAssignment=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineBinaryOp=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineCallArgs=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineDisjunctiveCatchTypes=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineFor=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineImplements=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineMethodParams=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineParenthesized=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineTernaryOp=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineThrows=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineTryResources=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader=0
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesBeforeClass=2
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement=NEW_LINE
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs=false
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.importGroupsOrder=*
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width=4
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indentCasesFromSwitch=false
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement=NEW_LINE
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement=NEW_LINE
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.separateImportGroups=false
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceAfterTypeCast=false
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab=4
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size=4
build.classes.dir=${build.dir}/classes
build.classes.excludes=**/*.java,**/*.form
# This directory is removed when the project is cleaned:
@@ -26,31 +64,53 @@ dist.jar=${dist.dir}/Essentials.jar
dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath=
excludes=
file.reference.BOSEconomy.jar=../lib/BOSEconomy.jar
file.reference.craftbukkit-0.0.1-SNAPSHOT.jar=..\\lib\\craftbukkit-0.0.1-SNAPSHOT.jar
file.reference.BOSEconomy7.jar=../lib/BOSEconomy7.jar
file.reference.bPermissions.jar=../lib/bPermissions.jar
file.reference.bpermissions2.jar=../lib/bpermissions2.jar
file.reference.bukkit.jar=../lib/bukkit.jar
file.reference.craftbukkit.jar=../lib/craftbukkit.jar
file.reference.iCo4.jar=../lib/iCo4.jar
file.reference.iCo5.jar=../lib/iCo5.jar
file.reference.junit-4.5.jar=..\\lib\\junit_4\\junit-4.5.jar
file.reference.Permissions.jar=..\\lib\\Permissions.jar
file.reference.iCo6.jar=../lib/iCo6.jar
file.reference.lombok.jar=../lib/lombok-0.10.8.jar
file.reference.MultiCurrency.jar=../lib/MultiCurrency.jar
file.reference.Permissions3.jar=../lib/Permissions3.jar
file.reference.PermissionsBukkit-1.2.jar=../lib/PermissionsBukkit-1.2.jar
file.reference.PermissionsEx.jar=../lib/PermissionsEx.jar
file.reference.Privileges.jar=..\\lib\\Privileges.jar
file.reference.Vault.jar=../lib/Vault.jar
includes=**
jar.compress=false
jar.archive.disabled=${jnlp.enabled}
jar.compress=true
jar.index=${jnlp.enabled}
javac.classpath=\
${file.reference.Permissions.jar}:\
${file.reference.craftbukkit-0.0.1-SNAPSHOT.jar}:\
${file.reference.BOSEconomy.jar}:\
${file.reference.Permissions3.jar}:\
${file.reference.iCo4.jar}:\
${file.reference.iCo5.jar}
${file.reference.iCo5.jar}:\
${file.reference.iCo6.jar}:\
${file.reference.MultiCurrency.jar}:\
${file.reference.BOSEconomy7.jar}:\
${file.reference.PermissionsEx.jar}:\
${file.reference.bPermissions.jar}:\
${file.reference.PermissionsBukkit-1.2.jar}:\
${file.reference.lombok.jar}:\
${reference.EssentialsGroupManager.jar}:\
${file.reference.bukkit.jar}:\
${file.reference.craftbukkit.jar}:\
${file.reference.Vault.jar}:\
${file.reference.Privileges.jar}:\
${file.reference.bpermissions2.jar}
# Space-separated list of extra javac options
javac.compilerargs=
javac.deprecation=false
javac.processorpath=\
${javac.classpath}
javac.source=1.5
javac.target=1.5
javac.source=1.6
javac.target=1.6
javac.test.classpath=\
${javac.classpath}:\
${build.classes.dir}:\
${file.reference.junit-4.5.jar}
${libs.junit_4.10.classpath}
javac.test.processorpath=\
${javac.test.classpath}
javadoc.additionalparam=
@@ -60,13 +120,25 @@ javadoc.noindex=false
javadoc.nonavbar=false
javadoc.notree=false
javadoc.private=false
javadoc.reference.PermissionsEx.jar=../lib/PermissionsEx-javadoc.jar
javadoc.splitindex=true
javadoc.use=true
javadoc.version=false
javadoc.windowtitle=
javadoc.windowtitle=Essentials Docs.
jnlp.codebase.type=no.codebase
jnlp.descriptor=application
jnlp.enabled=false
jnlp.mixed.code=default
jnlp.offline-allowed=false
jnlp.signed=false
jnlp.signing=
jnlp.signing.alias=
jnlp.signing.keystore=
meta.inf.dir=${src.dir}/META-INF
mkdist.disabled=false
mkdist.disabled=true
platform.active=default_platform
project.EssentialsGroupManager=../EssentialsGroupManager
reference.EssentialsGroupManager.jar=../EssentialsGroupManager/dist/EssentialsGroupManager.jar
run.classpath=\
${javac.classpath}:\
${build.classes.dir}
+10 -1
View File
@@ -14,6 +14,15 @@
<libraries xmlns="http://www.netbeans.org/ns/ant-project-libraries/1">
<definitions>../lib/nblibraries.properties</definitions>
</libraries>
<references xmlns="http://www.netbeans.org/ns/ant-project-references/1"/>
<references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
<reference>
<foreign-project>EssentialsGroupManager</foreign-project>
<artifact-type>jar</artifact-type>
<script>build.xml</script>
<target>jar</target>
<clean-target>clean</clean-target>
<id>jar</id>
</reference>
</references>
</configuration>
</project>
@@ -1,84 +1,153 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IBackup;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.ISettings;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;
import java.util.logging.Logger;
import lombok.Cleanup;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
import org.bukkit.craftbukkit.CraftServer;
public class Backup implements Runnable {
private static final Logger logger = Logger.getLogger("Minecraft");
private final CraftServer server;
private final IEssentials ess;
private boolean running = false;
private int taskId = -1;
private boolean active = false;
public Backup(IEssentials ess) {
public class Backup implements Runnable, IBackup
{
private static final Logger LOGGER = Bukkit.getLogger();
private transient final Server server;
private transient final IEssentials ess;
private transient final AtomicBoolean running = new AtomicBoolean(false);
private transient int taskId = -1;
private transient final AtomicBoolean active = new AtomicBoolean(false);
public Backup(final IEssentials ess)
{
this.ess = ess;
server = (CraftServer)ess.getServer();
if (server.getOnlinePlayers().length > 0) {
server = ess.getServer();
if (server.getOnlinePlayers().length > 0)
{
startTask();
}
}
void onPlayerJoin() {
startTask();
}
private void startTask() {
if (!running) {
long interval = ess.getSettings().getBackupInterval()*1200; // minutes -> ticks
if (interval < 1200) {
@Override
public final void startTask()
{
if (running.compareAndSet(false, true))
{
@Cleanup
final ISettings settings = ess.getSettings();
settings.acquireReadLock();
final long interval = settings.getData().getGeneral().getBackup().getInterval() * 1200; // minutes -> ticks
if (interval < 1200)
{
running.set(false);
return;
}
taskId = ess.scheduleSyncRepeatingTask(this, interval, interval);
running = true;
}
}
public void run() {
if (active) return;
active = true;
final String command = ess.getSettings().getBackupCommand();
if (command == null || "".equals(command)) {
@Override
public void run()
{
if (!active.compareAndSet(false, true))
{
return;
}
logger.log(Level.INFO, Util.i18n("backupStarted"));
final CommandSender cs = server.getServer().console;
server.dispatchCommand(cs, "save-all");
server.dispatchCommand(cs, "save-off");
ess.scheduleAsyncDelayedTask(
new Runnable() {
@Cleanup
final ISettings settings = ess.getSettings();
settings.acquireReadLock();
final String command = settings.getData().getGeneral().getBackup().getCommand();
if (command == null || command.isEmpty())
{
return;
}
LOGGER.log(Level.INFO, _("backupStarted"));
final CommandSender consoleSender = server.getConsoleSender();
server.dispatchCommand(consoleSender, "save-all");
server.dispatchCommand(consoleSender, "save-off");
public void run() {
try {
Process child = Runtime.getRuntime().exec(command);
child.waitFor();
} catch (InterruptedException ex) {
logger.log(Level.SEVERE, null, ex);
} catch (IOException ex) {
logger.log(Level.SEVERE, null, ex);
} finally {
ess.scheduleSyncDelayedTask(
new Runnable() {
public void run() {
server.dispatchCommand(cs, "save-on");
if (server.getOnlinePlayers().length == 0) {
running = false;
if (taskId != -1) {
server.getScheduler().cancelTask(taskId);
}
}
active = false;
logger.log(Level.INFO, Util.i18n("backupFinished"));
}
});
}
}
});
ess.scheduleAsyncDelayedTask(new BackupRunner(command));
}
private class BackupRunner implements Runnable
{
private final transient String command;
public BackupRunner(final String command)
{
this.command = command;
}
@Override
public void run()
{
try
{
final ProcessBuilder childBuilder = new ProcessBuilder(command);
childBuilder.redirectErrorStream(true);
childBuilder.directory(ess.getDataFolder().getParentFile().getParentFile());
final Process child = childBuilder.start();
final BufferedReader reader = new BufferedReader(new InputStreamReader(child.getInputStream()));
try
{
child.waitFor();
String line;
do
{
line = reader.readLine();
if (line != null)
{
LOGGER.log(Level.INFO, line);
}
}
while (line != null);
}
finally
{
reader.close();
}
}
catch (InterruptedException ex)
{
LOGGER.log(Level.SEVERE, null, ex);
}
catch (IOException ex)
{
LOGGER.log(Level.SEVERE, null, ex);
}
finally
{
ess.scheduleSyncDelayedTask(new EnableSavingRunner());
}
}
}
private class EnableSavingRunner implements Runnable
{
@Override
public void run()
{
server.dispatchCommand(server.getConsoleSender(), "save-on");
if (server.getOnlinePlayers().length == 0)
{
running.set(false);
if (taskId != -1)
{
server.getScheduler().cancelTask(taskId);
}
}
active.set(false);
LOGGER.log(Level.INFO, _("backupFinished"));
}
}
}
@@ -1,104 +0,0 @@
package com.earth2me.essentials;
import org.bukkit.inventory.ItemStack;
public class Charge
{
private final String command;
private final Double costs;
private final ItemStack items;
private final IEssentials ess;
public Charge(String command, IEssentials ess)
{
this(command, null, null, ess);
}
public Charge(double money, IEssentials ess)
{
this(null, money, null, ess);
}
public Charge(ItemStack items, IEssentials ess)
{
this(null, null, items, ess);
}
private Charge(String command, Double money, ItemStack item, IEssentials ess)
{
this.command = command;
this.costs = money;
this.items = item;
this.ess = ess;
}
public void isAffordableFor(IUser user) throws Exception
{
double mon = user.getMoney();
if (costs != null)
{
if (mon < costs && !user.isAuthorized("essentials.eco.loan"))
{
throw new Exception(Util.i18n("notEnoughMoney"));
}
}
if (items != null)
{
if (!InventoryWorkaround.containsItem(user.getInventory(), true, items))
{
throw new Exception(Util.format("missingItems", items.getAmount(), items.getType().toString().toLowerCase().replace("_", " ")));
}
}
if (command != null && !command.isEmpty())
{
if (user.isAuthorized("essentials.nocommandcost.all")
|| user.isAuthorized("essentials.nocommandcost." + command))
{
return;
}
double cost = ess.getSettings().getCommandCost(command.startsWith("/") ? command.substring(1) : command);
if (mon < cost && !user.isAuthorized("essentials.eco.loan"))
{
throw new Exception(Util.i18n("notEnoughMoney"));
}
}
}
public void charge(IUser user) throws Exception
{
double mon = user.getMoney();
if (costs != null)
{
if (mon < costs && !user.isAuthorized("essentials.eco.loan"))
{
throw new Exception(Util.i18n("notEnoughMoney"));
}
user.takeMoney(costs);
}
if (items != null)
{
if (!InventoryWorkaround.containsItem(user.getInventory(), true, items))
{
throw new Exception(Util.format("missingItems", items.getAmount(), items.getType().toString().toLowerCase().replace("_", " ")));
}
InventoryWorkaround.removeItem(user.getInventory(), true, items);
user.updateInventory();
}
if (command != null && !command.isEmpty())
{
if (user.isAuthorized("essentials.nocommandcost.all")
|| user.isAuthorized("essentials.nocommandcost." + command))
{
return;
}
double cost = ess.getSettings().getCommandCost(command.startsWith("/") ? command.substring(1) : command);
if (mon < cost && !user.isAuthorized("essentials.eco.loan"))
{
throw new Exception(Util.i18n("notEnoughMoney"));
}
user.takeMoney(cost);
}
}
}
@@ -1,34 +1,33 @@
package com.earth2me.essentials;
import org.bukkit.Server;
import com.earth2me.essentials.api.IReplyTo;
import org.bukkit.command.CommandSender;
import org.bukkit.craftbukkit.CraftServer;
public final class Console implements IReplyTo {
public final class Console implements IReplyTo
{
private static Console instance = new Console();
private CommandSender replyTo;
public final static String NAME = "Console";
private Console() {
}
public static CommandSender getCommandSender(Server server) throws Exception {
if (! (server instanceof CraftServer)) {
throw new Exception(Util.i18n("invalidServer"));
}
return ((CraftServer)server).getServer().console;
private Console()
{
}
public void setReplyTo(CommandSender user) {
@Override
public void setReplyTo(final CommandSender user)
{
replyTo = user;
}
public CommandSender getReplyTo() {
@Override
public CommandSender getReplyTo()
{
return replyTo;
}
public static Console getConsoleReplyTo() {
public static Console getConsoleReplyTo()
{
return instance;
}
}
@@ -0,0 +1,295 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* This utility class is used for converting between the ingame
* time in ticks to ingame time as a friendly string.
* Note that the time is INGAME.
*
* http://www.minecraftwiki.net/wiki/Day/night_cycle
*
* @author Olof Larsson
*/
public final class DescParseTickFormat
{
public static final Map<String, Integer> nameToTicks = new LinkedHashMap<String, Integer>();
public static final Set<String> resetAliases = new HashSet<String>();
public static final int ticksAtMidnight = 18000;
public static final int ticksPerDay = 24000;
public static final int ticksPerHour = 1000;
public static final double ticksPerMinute = 1000d / 60d;
public static final double ticksPerSecond = 1000d / 60d / 60d;
private static final SimpleDateFormat SDFTwentyFour = new SimpleDateFormat("HH:mm", Locale.ENGLISH);
private static final SimpleDateFormat SDFTwelve = new SimpleDateFormat("h:mmaa", Locale.ENGLISH);
static
{
SDFTwentyFour.setTimeZone(TimeZone.getTimeZone("GMT"));
SDFTwelve.setTimeZone(TimeZone.getTimeZone("GMT"));
nameToTicks.put("sunrise", 23000);
nameToTicks.put("dawn", 23000);
nameToTicks.put("daystart", 0);
nameToTicks.put("day", 0);
nameToTicks.put("morning", 1000);
nameToTicks.put("midday", 6000);
nameToTicks.put("noon", 6000);
nameToTicks.put("afternoon", 9000);
nameToTicks.put("sunset", 12000);
nameToTicks.put("dusk", 12000);
nameToTicks.put("sundown", 12000);
nameToTicks.put("nightfall", 12000);
nameToTicks.put("nightstart", 14000);
nameToTicks.put("night", 14000);
nameToTicks.put("midnight", 18000);
resetAliases.add("reset");
resetAliases.add("normal");
resetAliases.add("default");
}
private DescParseTickFormat()
{
}
// ============================================
// PARSE. From describing String to int
// --------------------------------------------
public static long parse(String desc) throws NumberFormatException
{
// Only look at alphanumeric and lowercase and : for 24:00
desc = desc.toLowerCase(Locale.ENGLISH).replaceAll("[^A-Za-z0-9:]", "");
// Detect ticks format
try
{
return parseTicks(desc);
}
catch (Exception e)
{
}
// Detect 24-hour format
try
{
return parse24(desc);
}
catch (Exception e)
{
}
// Detect 12-hour format
try
{
return parse12(desc);
}
catch (Exception e)
{
}
// Detect aliases
try
{
return parseAlias(desc);
}
catch (Exception e)
{
}
// Well we failed to understand...
throw new NumberFormatException();
}
public static long parseTicks(String desc) throws NumberFormatException
{
if (!desc.matches("^[0-9]+ti?c?k?s?$"))
{
throw new NumberFormatException();
}
desc = desc.replaceAll("[^0-9]", "");
return Long.parseLong(desc) % 24000;
}
public static long parse24(String desc) throws NumberFormatException
{
if (!desc.matches("^[0-9]{2}[^0-9]?[0-9]{2}$"))
{
throw new NumberFormatException();
}
desc = desc.toLowerCase(Locale.ENGLISH).replaceAll("[^0-9]", "");
if (desc.length() != 4)
{
throw new NumberFormatException();
}
final int hours = Integer.parseInt(desc.substring(0, 2));
final int minutes = Integer.parseInt(desc.substring(2, 4));
return hoursMinutesToTicks(hours, minutes);
}
public static long parse12(String desc) throws NumberFormatException
{
if (!desc.matches("^[0-9]{1,2}([^0-9]?[0-9]{2})?(pm|am)$"))
{
throw new NumberFormatException();
}
int hours = 0;
int minutes = 0;
desc = desc.toLowerCase(Locale.ENGLISH).replaceAll("[^0-9]", "");
if (desc.length() > 4)
{
throw new NumberFormatException();
}
if (desc.length() == 4)
{
hours += Integer.parseInt(desc.substring(0, 2));
minutes += Integer.parseInt(desc.substring(2, 4));
}
else if (desc.length() == 3)
{
hours += Integer.parseInt(desc.substring(0, 1));
minutes += Integer.parseInt(desc.substring(1, 3));
}
else if (desc.length() == 2)
{
hours += Integer.parseInt(desc.substring(0, 2));
}
else if (desc.length() == 1)
{
hours += Integer.parseInt(desc.substring(0, 1));
}
else
{
throw new NumberFormatException();
}
if (desc.endsWith("pm") && hours != 12)
{
hours += 12;
}
if (desc.endsWith("am") && hours == 12)
{
hours -= 12;
}
return hoursMinutesToTicks(hours, minutes);
}
public static long hoursMinutesToTicks(final int hours, final int minutes)
{
long ret = ticksAtMidnight;
ret += (hours) * ticksPerHour;
ret += (minutes / 60.0) * ticksPerHour;
ret %= ticksPerDay;
return ret;
}
public static long parseAlias(final String desc) throws NumberFormatException
{
final Integer ret = nameToTicks.get(desc);
if (ret == null)
{
throw new NumberFormatException();
}
return ret;
}
public static boolean meansReset(final String desc)
{
return resetAliases.contains(desc);
}
// ============================================
// FORMAT. From int to describing String
// --------------------------------------------
public static String format(final long ticks)
{
return _("timeFormat", format24(ticks), format12(ticks), formatTicks(ticks));
}
public static String formatTicks(final long ticks)
{
return (ticks % ticksPerDay) + "ticks";
}
public static String format24(final long ticks)
{
synchronized (SDFTwentyFour)
{
return formatDateFormat(ticks, SDFTwentyFour);
}
}
public static String format12(final long ticks)
{
synchronized (SDFTwelve)
{
return formatDateFormat(ticks, SDFTwelve);
}
}
public static String formatDateFormat(final long ticks, final SimpleDateFormat format)
{
final Date date = ticksToDate(ticks);
return format.format(date);
}
public static Date ticksToDate(long ticks)
{
// Assume the server time starts at 0. It would start on a day.
// But we will simulate that the server started with 0 at midnight.
ticks = ticks - ticksAtMidnight + ticksPerDay;
// How many ingame days have passed since the server start?
final long days = ticks / ticksPerDay;
ticks = ticks - days * ticksPerDay;
// How many hours on the last day?
final long hours = ticks / ticksPerHour;
ticks = ticks - hours * ticksPerHour;
// How many minutes on the last day?
final long minutes = (long)Math.floor(ticks / ticksPerMinute);
final double dticks = ticks - minutes * ticksPerMinute;
// How many seconds on the last day?
final long seconds = (long)Math.floor(dticks / ticksPerSecond);
// Now we create an english GMT calendar (We wan't no daylight savings)
final Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.ENGLISH);
cal.setLenient(true);
// And we set the time to 0! And append the time that passed!
cal.set(0, Calendar.JANUARY, 1, 0, 0, 0);
cal.add(Calendar.DAY_OF_YEAR, (int)days);
cal.add(Calendar.HOUR_OF_DAY, (int)hours);
cal.add(Calendar.MINUTE, (int)minutes);
cal.add(Calendar.SECOND, (int)seconds + 1); // To solve rounding errors.
return cal.getTime();
}
}
@@ -0,0 +1,207 @@
package com.earth2me.essentials;
import com.earth2me.essentials.api.*;
import com.earth2me.essentials.perm.Permissions;
import com.earth2me.essentials.settings.MoneyHolder;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
public class Economy implements IEconomy
{
private final IEssentials ess;
private final MoneyHolder npcs;
public Economy(IEssentials ess)
{
this.ess = ess;
this.npcs = new MoneyHolder(ess);
}
private double getNPCBalance(String name) throws UserDoesNotExistException
{
npcs.acquireReadLock();
try
{
Map<String, Double> balances = npcs.getData().getBalances();
if (balances == null)
{
throw new UserDoesNotExistException(name);
}
Double balance = npcs.getData().getBalances().get(name.toLowerCase(Locale.ENGLISH));
if (balance == null)
{
throw new UserDoesNotExistException(name);
}
return balance;
}
finally
{
npcs.unlock();
}
}
private void setNPCBalance(String name, double balance, boolean checkExistance) throws UserDoesNotExistException
{
npcs.acquireWriteLock();
try
{
Map<String, Double> balances = npcs.getData().getBalances();
if (balances == null)
{
balances = new HashMap<String, Double>();
npcs.getData().setBalances(balances);
}
if (checkExistance && !balances.containsKey(name.toLowerCase(Locale.ENGLISH)))
{
throw new UserDoesNotExistException(name);
}
balances.put(name.toLowerCase(Locale.ENGLISH), balance);
}
finally
{
npcs.unlock();
}
}
private double getStartingBalance()
{
double startingBalance = 0;
ISettings settings = ess.getSettings();
settings.acquireReadLock();
try
{
startingBalance = settings.getData().getEconomy().getStartingBalance();
}
finally
{
settings.unlock();
}
return startingBalance;
}
@Override
public void onReload()
{
this.npcs.onReload(false);
}
@Override
public double getMoney(String name) throws UserDoesNotExistException
{
IUser user = ess.getUser(name);
if (user == null)
{
return getNPCBalance(name);
}
return user.getMoney();
}
@Override
public void setMoney(String name, double balance) throws NoLoanPermittedException, UserDoesNotExistException
{
IUser user = ess.getUser(name);
if (user == null)
{
setNPCBalance(name, balance, true);
return;
}
if (balance < 0.0 && !Permissions.ECO_LOAN.isAuthorized(user))
{
throw new NoLoanPermittedException();
}
user.setMoney(balance);
}
@Override
public void resetBalance(String name) throws NoLoanPermittedException, UserDoesNotExistException
{
setMoney(name, getStartingBalance());
}
@Override
public String format(double amount)
{
return Util.formatCurrency(amount, ess);
}
@Override
public boolean playerExists(String name)
{
try
{
getMoney(name);
return true;
}
catch (UserDoesNotExistException ex)
{
return false;
}
}
@Override
public boolean isNPC(String name) throws UserDoesNotExistException
{
boolean result = ess.getUser(name) == null;
if (result)
{
getNPCBalance(name);
}
return result;
}
@Override
public boolean createNPC(String name)
{
try
{
if (isNPC(name))
{
setNPCBalance(name, getStartingBalance(), false);
return true;
}
}
catch (UserDoesNotExistException ex)
{
try
{
setNPCBalance(name, getStartingBalance(), false);
return true;
}
catch (UserDoesNotExistException ex1)
{
//This should never happen!
}
}
return false;
}
@Override
public void removeNPC(String name) throws UserDoesNotExistException
{
npcs.acquireWriteLock();
try
{
Map<String, Double> balances = npcs.getData().getBalances();
if (balances == null)
{
balances = new HashMap<String, Double>();
npcs.getData().setBalances(balances);
}
if (balances.containsKey(name.toLowerCase(Locale.ENGLISH)))
{
balances.remove(name.toLowerCase(Locale.ENGLISH));
}
else
{
throw new UserDoesNotExistException(name);
}
}
finally
{
npcs.unlock();
}
}
}
@@ -0,0 +1,88 @@
package com.earth2me.essentials;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.regex.Pattern;
import org.bukkit.enchantments.Enchantment;
public final class Enchantments
{
private Enchantments()
{
}
private static final transient Pattern NUMPATTERN = Pattern.compile("\\d+");
private static final Map<String, Enchantment> ENCHANTMENTS = new HashMap<String, Enchantment>();
static
{
ENCHANTMENTS.put("alldamage", Enchantment.DAMAGE_ALL);
ENCHANTMENTS.put("alldmg", Enchantment.DAMAGE_ALL);
ENCHANTMENTS.put("sharpness", Enchantment.DAMAGE_ALL);
ENCHANTMENTS.put("arthropodsdamage", Enchantment.DAMAGE_ARTHROPODS);
ENCHANTMENTS.put("ardmg", Enchantment.DAMAGE_ARTHROPODS);
ENCHANTMENTS.put("baneofarthropods", Enchantment.DAMAGE_ARTHROPODS);
ENCHANTMENTS.put("undeaddamage", Enchantment.DAMAGE_UNDEAD);
ENCHANTMENTS.put("smite", Enchantment.DAMAGE_UNDEAD);
ENCHANTMENTS.put("digspeed", Enchantment.DIG_SPEED);
ENCHANTMENTS.put("efficiency", Enchantment.DIG_SPEED);
ENCHANTMENTS.put("durability", Enchantment.DURABILITY);
ENCHANTMENTS.put("dura", Enchantment.DURABILITY);
ENCHANTMENTS.put("unbreaking", Enchantment.DURABILITY);
ENCHANTMENTS.put("fireaspect", Enchantment.FIRE_ASPECT);
ENCHANTMENTS.put("fire", Enchantment.FIRE_ASPECT);
ENCHANTMENTS.put("knockback", Enchantment.KNOCKBACK);
ENCHANTMENTS.put("blockslootbonus", Enchantment.LOOT_BONUS_BLOCKS);
ENCHANTMENTS.put("fortune", Enchantment.LOOT_BONUS_BLOCKS);
ENCHANTMENTS.put("mobslootbonus", Enchantment.LOOT_BONUS_MOBS);
ENCHANTMENTS.put("mobloot", Enchantment.LOOT_BONUS_MOBS);
ENCHANTMENTS.put("looting", Enchantment.LOOT_BONUS_MOBS);
ENCHANTMENTS.put("oxygen", Enchantment.OXYGEN);
ENCHANTMENTS.put("respiration", Enchantment.OXYGEN);
ENCHANTMENTS.put("protection", Enchantment.PROTECTION_ENVIRONMENTAL);
ENCHANTMENTS.put("prot", Enchantment.PROTECTION_ENVIRONMENTAL);
ENCHANTMENTS.put("explosionsprotection", Enchantment.PROTECTION_EXPLOSIONS);
ENCHANTMENTS.put("expprot", Enchantment.PROTECTION_EXPLOSIONS);
ENCHANTMENTS.put("blastprotection", Enchantment.PROTECTION_EXPLOSIONS);
ENCHANTMENTS.put("fallprotection", Enchantment.PROTECTION_FALL);
ENCHANTMENTS.put("fallprot", Enchantment.PROTECTION_FALL);
ENCHANTMENTS.put("featherfalling", Enchantment.PROTECTION_FALL);
ENCHANTMENTS.put("fireprotection", Enchantment.PROTECTION_FIRE);
ENCHANTMENTS.put("fireprot", Enchantment.PROTECTION_FIRE);
ENCHANTMENTS.put("projectileprotection", Enchantment.PROTECTION_PROJECTILE);
ENCHANTMENTS.put("projprot", Enchantment.PROTECTION_PROJECTILE);
ENCHANTMENTS.put("silktouch", Enchantment.SILK_TOUCH);
ENCHANTMENTS.put("waterworker", Enchantment.WATER_WORKER);
ENCHANTMENTS.put("aquaaffinity", Enchantment.WATER_WORKER);
ENCHANTMENTS.put("firearrow", Enchantment.ARROW_FIRE);
ENCHANTMENTS.put("arrowdamage", Enchantment.ARROW_DAMAGE);
ENCHANTMENTS.put("arrowknockback", Enchantment.ARROW_KNOCKBACK);
ENCHANTMENTS.put("arrowkb", Enchantment.ARROW_KNOCKBACK);
ENCHANTMENTS.put("infinitearrows", Enchantment.ARROW_INFINITE);
ENCHANTMENTS.put("infarrows", Enchantment.ARROW_INFINITE);
}
public static Enchantment getByName(final String name) {
Enchantment enchantment;
if (NUMPATTERN.matcher(name).matches()) {
enchantment = Enchantment.getById(Integer.parseInt(name));
} else {
enchantment = Enchantment.getByName(name.toUpperCase(Locale.ENGLISH));
}
if (enchantment == null)
{
enchantment = ENCHANTMENTS.get(name.toLowerCase(Locale.ENGLISH));
}
return enchantment;
}
public static Set<Entry<String, Enchantment>> entrySet()
{
return ENCHANTMENTS.entrySet();
}
}
File diff suppressed because it is too large. Load diff
@@ -1,390 +0,0 @@
package com.earth2me.essentials;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.Sign;
import org.bukkit.craftbukkit.block.CraftSign;
import org.bukkit.event.block.*;
import org.bukkit.inventory.ItemStack;
public class EssentialsBlockListener extends BlockListener
{
private final IEssentials ess;
private static final Logger logger = Logger.getLogger("Minecraft");
public final static List<Material> protectedBlocks = new ArrayList<Material>(4);
static
{
protectedBlocks.add(Material.CHEST);
protectedBlocks.add(Material.BURNING_FURNACE);
protectedBlocks.add(Material.FURNACE);
protectedBlocks.add(Material.DISPENSER);
}
public EssentialsBlockListener(IEssentials ess)
{
this.ess = ess;
}
@Override
public void onBlockBreak(BlockBreakEvent event)
{
if (event.isCancelled()) return;
if (ess.getSettings().areSignsDisabled()) return;
User user = ess.getUser(event.getPlayer());
if (protectedBlocks.contains(event.getBlock().getType()) && !user.isAuthorized("essentials.signs.protection.override"))
{
if (isBlockProtected(event.getBlock(), user))
{
event.setCancelled(true);
user.sendMessage(Util.format("noDestroyPermission", event.getBlock().getType().toString().toLowerCase()));
return;
}
}
if (checkProtectionSign(event.getBlock(), user) != NOSIGN &&
checkProtectionSign(event.getBlock(), user) != OWNER)
{
event.setCancelled(true);
user.sendMessage(Util.format("noDestroyPermission", event.getBlock().getType().toString().toLowerCase()));
}
}
@Override
public void onSignChange(SignChangeEvent event)
{
if (event.isCancelled()) return;
if (ess.getSettings().areSignsDisabled()) return;
User user = ess.getUser(event.getPlayer());
String username = user.getName().substring(0, user.getName().length() > 14 ? 14 : user.getName().length());
try
{
if (event.getLine(0).equalsIgnoreCase("[Protection]"))
{
Block block = event.getBlock();
if (user.isAuthorized("essentials.signs.protection.create") && hasAdjacentChest(block) && !isBlockProtected(block, user))
event.setLine(0, "§1[Protection]");
else
event.setLine(0, "§4[Protection]");
event.setLine(3, username);
return;
}
if (event.getLine(0).equalsIgnoreCase("[Disposal]"))
{
if (user.isAuthorized("essentials.signs.disposal.create"))
event.setLine(0, "§1[Disposal]");
else
event.setLine(0, "§4[Disposal]");
return;
}
if (event.getLine(0).equalsIgnoreCase("[Heal]"))
{
event.setLine(0, "§4[Heal]");
if (user.isAuthorized("essentials.signs.heal.create"))
{
if (!event.getLine(1).isEmpty())
{
String[] l1 = event.getLine(1).split("[ :-]+", 2);
boolean m1 = l1[0].matches("^[^0-9][\\.0-9]+");
double q1 = Double.parseDouble(m1 ? l1[0].substring(1) : l1[0]);
if (q1 < 1 || (!m1 && (int)q1 < 1)) throw new Exception(Util.i18n("moreThanZero"));
if (!m1) ItemDb.get(l1[1]);
event.setLine(1, (m1 ? Util.formatCurrency(q1) : (int)q1 + " " + l1[1]));
}
event.setLine(0, "§1[Heal]");
}
return;
}
if (event.getLine(0).equalsIgnoreCase("[Free]"))
{
event.setLine(0, "§4[Free]");
ItemDb.get(event.getLine(1));
if (user.isAuthorized("essentials.signs.free.create"))
event.setLine(0, "§1[Free]");
return;
}
if (event.getLine(0).equalsIgnoreCase("[Mail]"))
{
if (user.isAuthorized("essentials.signs.mail.create"))
event.setLine(0, "§1[Mail]");
else
event.setLine(0, "§4[Mail]");
return;
}
if (event.getLine(0).equalsIgnoreCase("[Balance]"))
{
if (user.isAuthorized("essentials.signs.balance.create"))
event.setLine(0, "§1[Balance]");
else
event.setLine(0, "§4[Balance]");
return;
}
if (event.getLine(0).equalsIgnoreCase("[Warp]"))
{
event.setLine(0, "§4[Warp]");
if (user.isAuthorized("essentials.signs.warp.create")) {
if (!event.getLine(3).isEmpty())
{
String[] l1 = event.getLine(3).split("[ :-]+", 2);
boolean m1 = l1[0].matches("^[^0-9][\\.0-9]+");
if (!m1 && l1.length != 2)
{
throw new Exception(Util.format("invalidSignLine", 4));
}
double q1 = Double.parseDouble(m1 ? l1[0].substring(1) : l1[0]);
if ((int)q1 < 1) throw new Exception(Util.i18n("moreThanZero"));
if (!m1) ItemDb.get(l1[1]);
event.setLine(3, (m1 ? Util.formatCurrency(q1) : (int)q1 + " " + l1[1]));
}
if (event.getLine(1).isEmpty()) {
event.setLine(1, "§dWarp name!");
return;
} else {
ess.getWarps().getWarp(event.getLine(1));
if (event.getLine(2).equalsIgnoreCase("Everyone")) {
event.setLine(2, "§2Everyone");
}
event.setLine(0, "§1[Warp]");
}
}
return;
}
}
catch (Throwable ex)
{
user.sendMessage(Util.format("errorWithMessage", ex.getMessage()));
if (ess.getSettings().isDebug())
{
logger.log(Level.WARNING, ex.getMessage(), ex);
}
}
}
@Override
public void onBlockPlace(BlockPlaceEvent event)
{
if (event.isCancelled()) return;
Block signBlock = event.getBlockAgainst();
if (signBlock.getType() == Material.WALL_SIGN || signBlock.getType() == Material.SIGN_POST)
{
Sign sign = new CraftSign(signBlock);
if (sign.getLine(0).matches("§1\\[[a-zA-Z]+\\]"))
{
event.setCancelled(true);
return;
}
}
final User user = ess.getUser(event.getPlayer());
// Do not rely on getItemInHand();
// http://leaky.bukkit.org/issues/663
final ItemStack is = new ItemStack(event.getBlockPlaced().getType(), 1, (short)0, event.getBlockPlaced().getData());
switch(is.getType()) {
case WOODEN_DOOR:
is.setType(Material.WOOD_DOOR);
is.setDurability((short)0);
break;
case IRON_DOOR_BLOCK:
is.setType(Material.IRON_DOOR);
is.setDurability((short)0);
break;
case SIGN_POST:
case WALL_SIGN:
is.setType(Material.SIGN);
is.setDurability((short)0);
break;
case CROPS:
is.setType(Material.SEEDS);
is.setDurability((short)0);
break;
case CAKE_BLOCK:
is.setType(Material.CAKE);
is.setDurability((short)0);
break;
case BED_BLOCK:
is.setType(Material.BED);
is.setDurability((short)0);
break;
case REDSTONE_WIRE:
is.setType(Material.REDSTONE);
is.setDurability((short)0);
break;
case REDSTONE_TORCH_OFF:
case REDSTONE_TORCH_ON:
is.setType(Material.REDSTONE_TORCH_ON);
is.setDurability((short)0);
break;
case DIODE_BLOCK_OFF:
case DIODE_BLOCK_ON:
is.setType(Material.DIODE);
is.setDurability((short)0);
break;
case DOUBLE_STEP:
is.setType(Material.STEP);
break;
case TORCH:
case RAILS:
case LADDER:
case WOOD_STAIRS:
case COBBLESTONE_STAIRS:
case LEVER:
case STONE_BUTTON:
case FURNACE:
case DISPENSER:
case PUMPKIN:
case JACK_O_LANTERN:
case WOOD_PLATE:
case STONE_PLATE:
case PISTON_STICKY_BASE:
case PISTON_BASE:
is.setDurability((short)0);
break;
}
boolean unlimitedForUser = user.hasUnlimited(is);
if (unlimitedForUser) {
ess.scheduleSyncDelayedTask(
new Runnable() {
public void run() {
user.getInventory().addItem(is);
user.updateInventory();
}
});
}
}
public boolean hasAdjacentChest(Block block)
{
Block[] faces = getAdjacentBlocks(block);
for (Block b : faces)
{
if (protectedBlocks.contains(b.getType()))
{
return true;
}
}
return false;
}
private static final int NOT_ALLOWED = 0;
private static final int ALLOWED = 1;
private static final int NOSIGN = 2;
private static final int OWNER = 3;
private int checkProtectionSign(Block block, User user)
{
String username = user.getName().substring(0, user.getName().length() > 14 ? 14 : user.getName().length());
if (block.getType() == Material.SIGN_POST || block.getType() == Material.WALL_SIGN)
{
Sign sign = new CraftSign(block);
if (sign.getLine(0).equalsIgnoreCase("§1[Protection]") && !user.isAuthorized("essentials.signs.protection.override"))
{
for (int i = 1; i <= 2; i++) {
String line = sign.getLine(i);
if (line.startsWith("(") && line.endsWith(")")) {
line = line.substring(1, line.length() - 1);
if (user.inGroup(line)) {
return ALLOWED;
}
} else if (line.equalsIgnoreCase(username)) {
return ALLOWED;
}
}
if (sign.getLine(3).equalsIgnoreCase(username))
{
return OWNER;
}
return NOT_ALLOWED;
}
}
return NOSIGN;
}
private static Block[] getAdjacentBlocks(Block block)
{
return new Block[]
{
block.getFace(BlockFace.NORTH),
block.getFace(BlockFace.SOUTH),
block.getFace(BlockFace.EAST),
block.getFace(BlockFace.WEST),
block.getFace(BlockFace.DOWN),
block.getFace(BlockFace.UP)
};
}
public boolean isBlockProtected(Block block, User user)
{
Block[] faces = getAdjacentBlocks(block);
boolean protect = false;
for (Block b : faces)
{
int check = checkProtectionSign(b, user);
if (check == NOT_ALLOWED)
{
protect = true;
}
if (check == ALLOWED || check == OWNER)
{
return false;
}
if (protectedBlocks.contains(b.getType()))
{
Block[] faceChest = getAdjacentBlocks(b);
for (Block a : faceChest)
{
check = checkProtectionSign(a, user);
if (check == NOT_ALLOWED)
{
protect = true;
}
if (check == ALLOWED || check == OWNER)
{
return false;
}
}
}
}
return protect;
}
public static boolean isBlockProtected(Block block)
{
Block[] faces = getAdjacentBlocks(block);
for (Block b : faces)
{
if (b.getType() == Material.SIGN_POST || b.getType() == Material.WALL_SIGN)
{
Sign sign = new CraftSign(b);
if (sign.getLine(0).equalsIgnoreCase("§1[Protection]"))
{
return true;
}
}
if (protectedBlocks.contains(b.getType()))
{
Block[] faceChest = getAdjacentBlocks(b);
for (Block a : faceChest)
{
if (a.getType() == Material.SIGN_POST || a.getType() == Material.WALL_SIGN)
{
Sign sign = new CraftSign(a);
if (sign.getLine(0).equalsIgnoreCase("§1[Protection]"))
{
return true;
}
}
}
}
}
return false;
}
}
@@ -0,0 +1,316 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.*;
import com.earth2me.essentials.commands.EssentialsCommand;
import com.earth2me.essentials.commands.IEssentialsCommand;
import com.earth2me.essentials.commands.NoChargeException;
import com.earth2me.essentials.commands.NotEnoughArgumentsException;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.PluginCommand;
import org.bukkit.command.PluginCommandYamlParser;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public class EssentialsCommandHandler implements ICommandHandler
{
private final transient ClassLoader classLoader;
private final transient String commandPath;
private final transient String permissionPrefix;
private final transient IEssentialsModule module;
private static final transient Logger LOGGER = Bukkit.getLogger();
private final transient Map<String, List<PluginCommand>> altcommands = new HashMap<String, List<PluginCommand>>();
private final transient Map<String, String> disabledList = new HashMap<String, String>();
private final transient Map<String, IEssentialsCommand> commands = new HashMap<String, IEssentialsCommand>();
private final transient IEssentials ess;
public EssentialsCommandHandler(ClassLoader classLoader, String commandPath, String permissionPrefix, IEssentials ess)
{
this(classLoader, commandPath, permissionPrefix, null, ess);
}
public EssentialsCommandHandler(ClassLoader classLoader, String commandPath, String permissionPrefix, IEssentialsModule module, IEssentials ess)
{
this.classLoader = classLoader;
this.commandPath = commandPath;
this.permissionPrefix = permissionPrefix;
this.module = module;
this.ess = ess;
for (Plugin plugin : ess.getServer().getPluginManager().getPlugins())
{
if (plugin.isEnabled())
{
addPlugin(plugin);
}
}
}
@Override
public boolean handleCommand(final CommandSender sender, final Command command, final String commandLabel, final String[] args)
{
boolean disabled = false;
boolean overridden = false;
ISettings settings = ess.getSettings();
settings.acquireReadLock();
try
{
disabled = settings.getData().getCommands().isDisabled(command.getName());
overridden = !disabled || settings.getData().getCommands().isOverridden(command.getName());
}
finally
{
settings.unlock();
}
// Allow plugins to override the command via onCommand
if (!overridden && (!commandLabel.startsWith("e") || commandLabel.equalsIgnoreCase(command.getName())))
{
final PluginCommand pc = getAlternative(commandLabel);
if (pc != null)
{
executed(commandLabel, pc.getLabel());
try
{
return pc.execute(sender, commandLabel, args);
}
catch (final Exception ex)
{
final ArrayList<StackTraceElement> elements = new ArrayList<StackTraceElement>(Arrays.asList(ex.getStackTrace()));
elements.remove(0);
final ArrayList<StackTraceElement> toRemove = new ArrayList<StackTraceElement>();
for (final StackTraceElement e : elements)
{
if (e.getClassName().equals("com.earth2me.essentials.Essentials"))
{
toRemove.add(e);
}
}
elements.removeAll(toRemove);
final StackTraceElement[] trace = elements.toArray(new StackTraceElement[elements.size()]);
ex.setStackTrace(trace);
ex.printStackTrace();
sender.sendMessage(ChatColor.RED + "An internal error occurred while attempting to perform this command");
return true;
}
}
}
try
{
IUser user = null;
if (sender instanceof Player)
{
user = ess.getUser((Player)sender);
LOGGER.log(Level.INFO, String.format("[PLAYER_COMMAND] %s: /%s %s ", ((Player)sender).getName(), commandLabel, EssentialsCommand.getFinalArg(args, 0)));
}
// Check for disabled commands
if (disabled)
{
return true;
}
final String commandName = command.getName().toLowerCase(Locale.ENGLISH);
IEssentialsCommand cmd = commands.get(commandName);
if (cmd == null)
{
try
{
cmd = (IEssentialsCommand)classLoader.loadClass(commandPath + commandName).newInstance();
cmd.init(ess, commandName);
cmd.setEssentialsModule(module);
commands.put(commandName, cmd);
}
catch (Exception ex)
{
sender.sendMessage(_("commandNotLoaded", commandName));
LOGGER.log(Level.SEVERE, _("commandNotLoaded", commandName), ex);
return true;
}
}
// Check authorization
if (sender != null && cmd.isAuthorized(sender))
{
LOGGER.log(Level.WARNING, _("deniedAccessCommand", user.getName()));
user.sendMessage(_("noAccessCommand"));
return true;
}
// Run the command
try
{
if (user == null)
{
cmd.run(sender, command, commandLabel, args);
}
else
{
user.acquireReadLock();
try
{
cmd.run(user, command, commandLabel, args);
}
finally
{
user.unlock();
}
}
return true;
}
catch (NoChargeException ex)
{
return true;
}
catch (NotEnoughArgumentsException ex)
{
sender.sendMessage(command.getDescription());
sender.sendMessage(command.getUsage().replaceAll("<command>", commandLabel));
if (!ex.getMessage().isEmpty())
{
sender.sendMessage(ex.getMessage());
}
return true;
}
catch (Throwable ex)
{
showCommandError(sender, commandLabel, ex);
return true;
}
}
catch (Throwable ex)
{
LOGGER.log(Level.SEVERE, _("commandFailed", commandLabel), ex);
return true;
}
}
@Override
public void showCommandError(final CommandSender sender, final String commandLabel, final Throwable exception)
{
sender.sendMessage(_("errorWithMessage", exception.getMessage()));
if (ess.getSettings().isDebug())
{
LOGGER.log(Level.WARNING, _("errorCallingCommand", commandLabel), exception);
}
}
@Override
public void onReload()
{
}
public final void addPlugin(final Plugin plugin)
{
if (plugin.getDescription().getMain().contains("com.earth2me.essentials"))
{
return;
}
final List<Command> commands = PluginCommandYamlParser.parse(plugin);
final String pluginName = plugin.getDescription().getName().toLowerCase(Locale.ENGLISH);
for (Command command : commands)
{
final PluginCommand pc = (PluginCommand)command;
final List<String> labels = new ArrayList<String>(pc.getAliases());
labels.add(pc.getName());
PluginCommand reg = ess.getServer().getPluginCommand(pluginName + ":" + pc.getName().toLowerCase(Locale.ENGLISH));
if (reg == null)
{
reg = ess.getServer().getPluginCommand(pc.getName().toLowerCase(Locale.ENGLISH));
}
if (reg == null || !reg.getPlugin().equals(plugin))
{
continue;
}
for (String label : labels)
{
List<PluginCommand> plugincommands = altcommands.get(label.toLowerCase(Locale.ENGLISH));
if (plugincommands == null)
{
plugincommands = new ArrayList<PluginCommand>();
altcommands.put(label.toLowerCase(Locale.ENGLISH), plugincommands);
}
boolean found = false;
for (PluginCommand pc2 : plugincommands)
{
if (pc2.getPlugin().equals(plugin))
{
found = true;
}
}
if (!found)
{
plugincommands.add(reg);
}
}
}
}
public void removePlugin(final Plugin plugin)
{
final Iterator<Map.Entry<String, List<PluginCommand>>> iterator = altcommands.entrySet().iterator();
while (iterator.hasNext())
{
final Map.Entry<String, List<PluginCommand>> entry = iterator.next();
final Iterator<PluginCommand> pcIterator = entry.getValue().iterator();
while (pcIterator.hasNext())
{
final PluginCommand pc = pcIterator.next();
if (pc.getPlugin() == null || pc.getPlugin().equals(plugin))
{
pcIterator.remove();
}
}
if (entry.getValue().isEmpty())
{
iterator.remove();
}
}
}
public PluginCommand getAlternative(final String label)
{
final List<PluginCommand> commands = altcommands.get(label);
if (commands == null || commands.isEmpty())
{
return null;
}
if (commands.size() == 1)
{
return commands.get(0);
}
// return the first command that is not an alias
for (PluginCommand command : commands)
{
if (command.getName().equalsIgnoreCase(label))
{
return command;
}
}
// return the first alias
return commands.get(0);
}
public void executed(final String label, final String otherLabel)
{
if (ess.getSettings().isDebug())
{
LOGGER.log(Level.INFO, "Essentials: Alternative command " + label + " found, using " + otherLabel);
}
disabledList.put(label, otherLabel);
}
public Map<String, String> disabledCommands()
{
return disabledList;
}
}
@@ -1,239 +0,0 @@
package com.earth2me.essentials;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.config.Configuration;
public class EssentialsConf extends Configuration
{
private static final Logger logger = Logger.getLogger("Minecraft");
private File configFile;
private String templateName = null;
private Class<?> resourceClass = EssentialsConf.class;
public EssentialsConf(File configFile)
{
super(configFile);
this.configFile = configFile;
if (this.root == null)
{
this.root = new HashMap<String, Object>();
}
}
@Override
public void load()
{
configFile = configFile.getAbsoluteFile();
if (!configFile.getParentFile().exists())
{
if (!configFile.getParentFile().mkdirs())
{
logger.log(Level.SEVERE, Util.format("failedToCreateConfig", configFile.toString()));
}
}
if (!configFile.exists())
{
if (templateName != null)
{
logger.log(Level.INFO, Util.format("creatingConfigFromTemplate", configFile.toString()));
createFromTemplate();
}
else
{
try
{
logger.log(Level.INFO, Util.format("creatingEmptyConfig", configFile.toString()));
if (!configFile.createNewFile())
{
logger.log(Level.SEVERE, Util.format("failedToCreateConfig", configFile.toString()));
}
}
catch (IOException ex)
{
logger.log(Level.SEVERE, Util.format("failedToCreateConfig", configFile.toString()), ex);
}
}
}
super.load();
if (this.root == null)
{
this.root = new HashMap<String, Object>();
}
}
private void createFromTemplate()
{
InputStream istr = null;
OutputStream ostr = null;
try
{
istr = resourceClass.getResourceAsStream(templateName);
if (istr == null)
{
logger.log(Level.SEVERE, Util.format("couldNotFindTemplate", templateName));
return;
}
ostr = new FileOutputStream(configFile);
byte[] buffer = new byte[1024];
int length = 0;
length = istr.read(buffer);
while (length > 0)
{
ostr.write(buffer, 0, length);
length = istr.read(buffer);
}
}
catch (IOException ex)
{
logger.log(Level.SEVERE, Util.format("failedToWriteConfig", configFile.toString()), ex);
return;
}
finally
{
try
{
if (istr != null)
{
istr.close();
}
}
catch (IOException ex)
{
Logger.getLogger(EssentialsConf.class.getName()).log(Level.SEVERE, null, ex);
}
try
{
if (ostr != null)
{
ostr.close();
}
}
catch (IOException ex)
{
logger.log(Level.SEVERE, Util.format("failedToCloseConfig", configFile.toString()), ex);
}
}
}
public void setTemplateName(String templateName)
{
this.templateName = templateName;
}
public File getFile()
{
return configFile;
}
public void setTemplateName(String templateName, Class<?> resClass)
{
this.templateName = templateName;
this.resourceClass = resClass;
}
public boolean hasProperty(String path)
{
return getProperty(path) != null;
}
public Location getLocation(String path, Server server)
{
String worldName = getString((path != null ? path + "." : "") + "world");
if (worldName == null || worldName.isEmpty())
{
return null;
}
World world = server.getWorld(worldName);
if (world == null)
{
return null;
}
return new Location(world,
getDouble((path != null ? path + "." : "") + "x", 0),
getDouble((path != null ? path + "." : "") + "y", 0),
getDouble((path != null ? path + "." : "") + "z", 0),
(float)getDouble((path != null ? path + "." : "") + "yaw", 0),
(float)getDouble((path != null ? path + "." : "") + "pitch", 0));
}
public void setProperty(String path, Location loc)
{
setProperty((path != null ? path + "." : "") + "world", loc.getWorld().getName());
setProperty((path != null ? path + "." : "") + "x", loc.getX());
setProperty((path != null ? path + "." : "") + "y", loc.getY());
setProperty((path != null ? path + "." : "") + "z", loc.getZ());
setProperty((path != null ? path + "." : "") + "yaw", loc.getYaw());
setProperty((path != null ? path + "." : "") + "pitch", loc.getPitch());
}
public ItemStack getItemStack(String path)
{
return new ItemStack(
Material.valueOf(getString(path + ".type", "AIR")),
getInt(path + ".amount", 1),
(short)getInt(path + ".damage", 0)/*,
(byte)getInt(path + ".data", 0)*/);
}
public void setProperty(String path, ItemStack stack)
{
Map<String, Object> map = new HashMap<String, Object>();
map.put("type", stack.getType().toString());
map.put("amount", stack.getAmount());
map.put("damage", stack.getDurability());
// getData().getData() is broken
//map.put("data", stack.getDurability());
setProperty(path, map);
}
public long getLong(String path, long def)
{
Number num;
try
{
num = (Number)getProperty(path);
}
catch(ClassCastException ex)
{
return def;
}
if (num == null)
{
return def;
}
return num.longValue();
}
@Override
public double getDouble(String path, double def)
{
Number num;
try
{
num = (Number)getProperty(path);
}
catch(ClassCastException ex)
{
return def;
}
if (num == null)
{
return def;
}
return num.doubleValue();
}
}
@@ -1,250 +0,0 @@
package com.earth2me.essentials;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Material;
import org.bukkit.block.Sign;
import org.bukkit.craftbukkit.block.CraftSign;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockListener;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.inventory.ItemStack;
public class EssentialsEcoBlockListener extends BlockListener
{
private final IEssentials ess;
private static final Logger logger = Logger.getLogger("Minecraft");
public EssentialsEcoBlockListener(Essentials ess)
{
this.ess = ess;
}
@Override
public void onBlockBreak(BlockBreakEvent event)
{
if (event.isCancelled())
{
return;
}
if (ess.getSettings().areSignsDisabled())
{
return;
}
User user = ess.getUser(event.getPlayer());
String username = user.getName().substring(0, user.getName().length() > 13 ? 13 : user.getName().length());
if (event.getBlock().getType() != Material.WALL_SIGN && event.getBlock().getType() != Material.SIGN_POST)
{
return;
}
Sign sign = new CraftSign(event.getBlock());
if (sign.getLine(0).equals("§1[Trade]"))
{
if (!sign.getLine(3).substring(2).equals(username))
{
if (!user.isOp())
{
event.setCancelled(true);
}
return;
}
try
{
String[] l1 = sign.getLines()[1].split("[ :-]+");
String[] l2 = sign.getLines()[2].split("[ :-]+");
boolean m1 = l1[0].matches("[^0-9][0-9]+(\\.[0-9]+)?");
boolean m2 = l2[0].matches("[^0-9][0-9]+(\\.[0-9]+)?");
double q1 = Double.parseDouble(m1 ? l1[0].substring(1) : l1[0]);
double q2 = Double.parseDouble(m2 ? l2[0].substring(1) : l2[0]);
double r1 = Double.parseDouble(l1[m1 ? 1 : 2]);
double r2 = Double.parseDouble(l2[m2 ? 1 : 2]);
if ((!m1 & q1 < 1) || (!m2 & q2 < 1))
{
throw new Exception(Util.i18n("moreThanZero"));
}
ItemStack i1 = m1 || r1 <= 0 ? null : ItemDb.get(l1[1], (int)r1);
ItemStack i2 = m2 || r2 <= 0 ? null : ItemDb.get(l2[1], (int)r2);
if (m1)
{
user.giveMoney(r1);
}
else if (i1 != null)
{
Map<Integer, ItemStack> leftOver = user.getInventory().addItem(i1);
for (ItemStack itemStack : leftOver.values())
{
InventoryWorkaround.dropItem(user.getLocation(), itemStack);
}
}
if (m2)
{
user.giveMoney(r2);
}
else if (i2 != null)
{
Map<Integer, ItemStack> leftOver = user.getInventory().addItem(i2);
for (ItemStack itemStack : leftOver.values())
{
InventoryWorkaround.dropItem(user.getLocation(), itemStack);
}
}
user.updateInventory();
sign.setType(Material.AIR);
}
catch (Throwable ex)
{
user.sendMessage(Util.format("errorWithMessage", ex.getMessage()));
if (ess.getSettings().isDebug())
{
logger.log(Level.WARNING, ex.getMessage(), ex);
}
}
return;
}
}
@Override
public void onSignChange(SignChangeEvent event)
{
if (ess.getSettings().areSignsDisabled())
{
return;
}
User user = ess.getUser(event.getPlayer());
String username = user.getName().substring(0, user.getName().length() > 13 ? 13 : user.getName().length());
if ((event.getLine(0).equalsIgnoreCase("[Buy]") || event.getLine(0).equalsIgnoreCase("#1[Buy]")) && user.isAuthorized("essentials.signs.buy.create"))
{
try
{
event.setLine(0, "§1[Buy]");
event.setLine(1, "" + Math.abs(Integer.parseInt(event.getLine(1))));
ItemStack is = ItemDb.get(event.getLine(2));
if (is.getTypeId() == 0 || Math.abs(Integer.parseInt(event.getLine(1))) == 0)
{
throw new Exception("Don't sell air.");
}
double price = Double.parseDouble(event.getLine(3).replaceAll("[^0-9\\.]", ""));
event.setLine(3, Util.formatCurrency(price));
}
catch (Throwable ex)
{
user.sendMessage(Util.format("errorWithMessage", ex.getMessage()));
if (ess.getSettings().isDebug())
{
logger.log(Level.WARNING, ex.getMessage(), ex);
}
event.setLine(0, "§4[Buy]");
event.setLine(1, "#");
event.setLine(2, "Item");
event.setLine(3, "$Price");
}
return;
}
if ((event.getLine(0).equalsIgnoreCase("[Sell]") || event.getLine(0).equalsIgnoreCase("#1[Sell]")) && user.isAuthorized("essentials.signs.sell.create"))
{
try
{
event.setLine(0, "§1[Sell]");
event.setLine(1, "" + Math.abs(Integer.parseInt(event.getLine(1))));
ItemStack is = ItemDb.get(event.getLine(2));
if (is.getTypeId() == 0 || Math.abs(Integer.parseInt(event.getLine(1))) == 0)
{
throw new Exception("Can't buy air.");
}
double price = Double.parseDouble(event.getLine(3).replaceAll("[^0-9\\.]", ""));
event.setLine(3, Util.formatCurrency(price));
}
catch (Throwable ex)
{
user.sendMessage(Util.format("errorWithMessage", ex.getMessage()));
if (ess.getSettings().isDebug())
{
logger.log(Level.WARNING, ex.getMessage(), ex);
}
event.setLine(0, "§4[Sell]");
event.setLine(1, "#");
event.setLine(2, "Item");
event.setLine(3, "$Price");
}
return;
}
if ((event.getLine(0).equalsIgnoreCase("[Trade]") || event.getLine(0).equalsIgnoreCase("#1[Trade]")) && user.isAuthorized("essentials.signs.trade.create"))
{
try
{
String[] l1 = event.getLine(1).split("[ :-]+");
String[] l2 = event.getLine(2).split("[ :-]+");
boolean m1 = l1[0].matches("[^0-9][0-9]+(\\.[0-9]+)?");
boolean m2 = l2[0].matches("[^0-9][0-9]+(\\.[0-9]+)?");
double q1 = Double.parseDouble(m1 ? l1[0].substring(1) : l1[0]);
double q2 = Double.parseDouble(m2 ? l2[0].substring(1) : l2[0]);
if (m1 ? l1.length != 1 : l1.length != 2)
{
throw new Exception(Util.format("invalidSignLine", 2));
}
if (m2 ? l2.length != 2 : l2.length != 3)
{
throw new Exception(Util.format("invalidSignLine", 3));
}
double r2 = Double.parseDouble(l2[m2 ? 1 : 2]);
r2 = m2 ? r2 : r2 - r2 % q2;
if ((!m1 & q1 < 1) || (!m2 & q2 < 1) || r2 < 1)
{
throw new Exception(Util.i18n("moreThanZero"));
}
if (!m1)
{
ItemDb.get(l1[1]);
}
if (m2)
{
if (user.getMoney() < r2)
{
throw new Exception(Util.i18n("notEnoughMoney"));
}
user.takeMoney(r2);
//user.sendMessage("r2: " + r2 + " q2: " + q2);
}
else
{
ItemStack i2 = ItemDb.get(l2[1], (int)r2);
if (!InventoryWorkaround.containsItem(user.getInventory(), true, i2))
{
throw new Exception(Util.format("missingItems", (int)r2, l2[1]));
}
InventoryWorkaround.removeItem(user.getInventory(), true, i2);
user.updateInventory();
}
event.setLine(0, "§1[Trade]");
event.setLine(1, (m1 ? Util.formatCurrency(q1) : (int)q1 + " " + l1[1]) + ":0");
event.setLine(2, (m2 ? Util.formatCurrency(q2) : (int)q2 + " " + l2[1]) + ":" + (m2 ? Util.roundDouble(r2) : "" + (int)r2));
event.setLine(3, "§8" + username);
}
catch (Throwable ex)
{
user.sendMessage(Util.format("errorWithMessage", ex.getMessage()));
if (ess.getSettings().isDebug())
{
logger.log(Level.WARNING, ex.getMessage(), ex);
}
event.setLine(0, "§4[Trade]");
event.setLine(1, "# ItemOr" + ess.getSettings().getCurrencySymbol());
event.setLine(2, "# ItemOr" + ess.getSettings().getCurrencySymbol() + ":#");
event.setLine(3, "§8" + username);
}
return;
}
}
}
@@ -1,211 +0,0 @@
package com.earth2me.essentials;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Material;
import org.bukkit.block.Sign;
import org.bukkit.craftbukkit.block.CraftSign;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerListener;
import org.bukkit.inventory.ItemStack;
public class EssentialsEcoPlayerListener extends PlayerListener
{
private final IEssentials ess;
private static final Logger logger = Logger.getLogger("Minecraft");
EssentialsEcoPlayerListener(IEssentials ess)
{
this.ess = ess;
}
@Override
public void onPlayerInteract(PlayerInteractEvent event)
{
if (ess.getSettings().areSignsDisabled())
{
return;
}
if (event.getAction() != Action.RIGHT_CLICK_BLOCK)
{
return;
}
User user = ess.getUser(event.getPlayer());
String username = user.getName().substring(0, user.getName().length() > 13 ? 13 : user.getName().length());
if (event.getClickedBlock().getType() != Material.WALL_SIGN && event.getClickedBlock().getType() != Material.SIGN_POST)
{
return;
}
Sign sign = new CraftSign(event.getClickedBlock());
if (sign.getLine(0).equals("§1[Buy]") && user.isAuthorized("essentials.signs.buy.use"))
{
try
{
int amount = Integer.parseInt(sign.getLine(1));
ItemStack item = ItemDb.get(sign.getLine(2), amount);
double cost = Double.parseDouble(sign.getLine(3).substring(1));
if (user.getMoney() < cost)
{
throw new Exception(Util.i18n("notEnoughMoney"));
}
user.takeMoney(cost);
Map<Integer, ItemStack> leftOver = user.getInventory().addItem(item);
for (ItemStack itemStack : leftOver.values())
{
InventoryWorkaround.dropItem(user.getLocation(), itemStack);
}
user.updateInventory();
}
catch (Throwable ex)
{
user.sendMessage(Util.format("errorWithMessage", ex.getMessage()));
if (ess.getSettings().isDebug())
{
logger.log(Level.WARNING, ex.getMessage(), ex);
}
}
return;
}
if (sign.getLine(0).equals("§1[Sell]") && user.isAuthorized("essentials.signs.sell.use"))
{
try
{
int amount = Integer.parseInt(sign.getLine(1));
ItemStack item = ItemDb.get(sign.getLine(2), amount);
double cost = Double.parseDouble(sign.getLine(3).substring(1));
if (!InventoryWorkaround.containsItem(user.getInventory(), true, item))
{
throw new Exception(Util.format("missingItems", amount, sign.getLine(2)));
}
user.giveMoney(cost);
InventoryWorkaround.removeItem(user.getInventory(), true, item);
user.updateInventory();
}
catch (Throwable ex)
{
user.sendMessage(Util.format("errorWithMessage", ex.getMessage()));
if (ess.getSettings().isDebug())
{
logger.log(Level.WARNING, ex.getMessage(), ex);
}
}
return;
}
if (sign.getLine(0).equals("§1[Trade]") && user.isAuthorized("essentials.signs.trade.use"))
{
try
{
String[] l1 = sign.getLine(1).split("[ :-]+");
String[] l2 = sign.getLine(2).split("[ :-]+");
boolean m1 = l1[0].matches("[^0-9][0-9]+(\\.[0-9]+)?");
boolean m2 = l2[0].matches("[^0-9][0-9]+(\\.[0-9]+)?");
double q1 = Double.parseDouble(m1 ? l1[0].substring(1) : l1[0]);
double q2 = Double.parseDouble(m2 ? l2[0].substring(1) : l2[0]);
double r1 = Double.parseDouble(l1[m1 ? 1 : 2]);
double r2 = Double.parseDouble(l2[m2 ? 1 : 2]);
r1 = m1 ? r1 : r1 - r1 % q1;
r2 = m2 ? r2 : r2 - r2 % q2;
if ((!m1 & q1 < 1) || (!m2 & q2 < 1))
{
throw new Exception(Util.i18n("moreThanZero"));
}
ItemStack i1 = m1 || r1 <= 0 ? null : ItemDb.get(l1[1], (int)r1);
ItemStack qi1 = m1 ? null : ItemDb.get(l1[1], (int)q1);
ItemStack qi2 = m2 ? null : ItemDb.get(l2[1], (int)q2);
if (username.equals(sign.getLine(3).substring(2)))
{
if (m1)
{
user.giveMoney(r1);
}
else if (i1 != null)
{
Map<Integer, ItemStack> leftOver = user.getInventory().addItem(i1);
for (ItemStack itemStack : leftOver.values())
{
InventoryWorkaround.dropItem(user.getLocation(), itemStack);
}
user.updateInventory();
}
r1 = 0;
sign.setLine(1, (m1 ? Util.formatCurrency(q1) : ((int)q1) + " " + l1[1]) + ":0");
sign.update();
}
else
{
if (m1)
{
if (user.getMoney() < q1)
{
throw new Exception(Util.i18n("notEnoughMoney"));
}
}
else
{
if (!InventoryWorkaround.containsItem(user.getInventory(), true, qi1))
{
throw new Exception(Util.format("missingItems", (int)q1, l1[1]));
}
}
if (r2 < q2)
{
throw new Exception(Util.i18n("tradeSignEmpty"));
}
if (m1)
{
user.takeMoney(q1);
}
else
{
InventoryWorkaround.removeItem(user.getInventory(), true, qi1);
}
if (m2)
{
user.giveMoney(q2);
}
else
{
Map<Integer, ItemStack> leftOver = user.getInventory().addItem(qi2);
for (ItemStack itemStack : leftOver.values())
{
InventoryWorkaround.dropItem(user.getLocation(), itemStack);
}
}
user.updateInventory();
r1 += q1;
r2 -= q2;
sign.setLine(0, "§1[Trade]");
sign.setLine(1, (m1 ? Util.formatCurrency(q1) : ((int)q1) + " " + l1[1]) + ":" + (m1 ? Util.roundDouble(r1) : "" + (int)r1));
sign.setLine(2, (m2 ? Util.formatCurrency(q2) : ((int)q2) + " " + l2[1]) + ":" + (m2 ? Util.roundDouble(r2) : "" + (int)r2));
sign.update();
user.sendMessage(Util.i18n("tradeCompleted"));
}
}
catch (Throwable ex)
{
user.sendMessage(Util.format("errorWithMessage", ex.getMessage()));
if (ess.getSettings().isDebug())
{
logger.log(Level.WARNING, ex.getMessage(), ex);
}
}
return;
}
}
}
@@ -1,82 +0,0 @@
package com.earth2me.essentials;
import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityDamageByBlockEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageByProjectileEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityListener;
import org.bukkit.inventory.ItemStack;
public class EssentialsEntityListener extends EntityListener
{
private final IEssentials ess;
public EssentialsEntityListener(IEssentials ess)
{
this.ess = ess;
}
@Override
public void onEntityDamage(EntityDamageEvent event)
{
if (event instanceof EntityDamageByEntityEvent)
{
EntityDamageByEntityEvent edEvent = (EntityDamageByEntityEvent)event;
Entity eAttack = edEvent.getDamager();
Entity eDefend = edEvent.getEntity();
if (eDefend instanceof Player && eAttack instanceof Player)
{
User defender = ess.getUser(eDefend);
User attacker = ess.getUser(eAttack);
ItemStack is = attacker.getItemInHand();
String command = attacker.getPowertool(is);
if (command != null && !command.isEmpty())
{
attacker.getServer().dispatchCommand(attacker, command.replaceAll("\\{player\\}", defender.getName()));
event.setCancelled(true);
return;
}
}
}
if (event instanceof EntityDamageEvent || event instanceof EntityDamageByBlockEvent || event instanceof EntityDamageByProjectileEvent)
{
if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled())
{
CraftPlayer player = (CraftPlayer)event.getEntity();
player.getHandle().fireTicks = 0;
player.setRemainingAir(player.getMaximumAir());
event.setCancelled(true);
}
}
}
@Override
public void onEntityCombust(EntityCombustEvent event)
{
if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled())
{
event.setCancelled(true);
}
}
@Override
public void onEntityDeath(EntityDeathEvent event)
{
if (event.getEntity() instanceof Player)
{
User user = ess.getUser(event.getEntity());
if (user.isAuthorized("essentials.back.ondeath") && !ess.getSettings().isCommandDisabled("back"))
{
user.setLastLocation();
user.sendMessage(Util.i18n("backAfterDeath"));
}
}
}
}
@@ -1,128 +0,0 @@
package com.earth2me.essentials;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
class EssentialsErrorHandler extends Handler
{
private final Map<BigInteger, String> errors = new HashMap<BigInteger, String>();
private final List<LogRecord> records = new LinkedList<LogRecord>();
public EssentialsErrorHandler()
{
}
@Override
public void publish(LogRecord lr)
{
if (lr.getThrown() == null || lr.getLevel().intValue() < Level.WARNING.intValue())
{
return;
}
synchronized (records)
{
records.add(lr);
}
}
@Override
public void flush()
{
synchronized (records)
{
sortRecords();
}
}
@Override
public void close() throws SecurityException
{
synchronized (records)
{
sortRecords();
}
}
private void sortRecords()
{
for (LogRecord lr : records)
{
try
{
if (lr.getThrown() == null)
{
return;
}
Throwable tr = lr.getThrown();
StackTraceElement[] elements = tr.getStackTrace();
if (elements == null || elements.length <= 0)
{
return;
}
boolean essentialsFound = false;
for (StackTraceElement stackTraceElement : elements)
{
if (stackTraceElement.getClassName().contains("com.earth2me.essentials"))
{
essentialsFound = true;
break;
}
}
if (!essentialsFound && tr.getCause() != null)
{
Throwable cause = tr.getCause();
StackTraceElement[] elements2 = cause.getStackTrace();
if (elements2 != null)
{
for (StackTraceElement stackTraceElement : elements2)
{
if (stackTraceElement.getClassName().contains("com.earth2me.essentials"))
{
essentialsFound = true;
break;
}
}
}
}
StringBuilder sb = new StringBuilder();
sb.append("[").append(lr.getLevel().getName()).append("] ").append(lr.getMessage()).append("\n");
sb.append(tr.getMessage()).append("\n");
for (StackTraceElement stackTraceElement : tr.getStackTrace())
{
sb.append(stackTraceElement.toString()).append("\n");
}
if (tr.getCause() != null && tr.getCause().getStackTrace() != null)
{
sb.append(tr.getCause().getMessage()).append("\n");
for (StackTraceElement stackTraceElement : tr.getCause().getStackTrace())
{
sb.append(stackTraceElement.toString()).append("\n");
}
}
String errorReport = sb.toString();
byte[] bytesOfMessage = errorReport.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("MD5");
BigInteger bi = new BigInteger(md.digest(bytesOfMessage));
errors.put(bi, errorReport);
}
catch (Throwable t)
{
//Ignore all exceptions inside the exception handler
}
}
records.clear();
}
Map<BigInteger, String> getErrors()
{
return errors;
}
}
@@ -1,596 +0,0 @@
package com.earth2me.essentials;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.minecraft.server.InventoryPlayer;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.craftbukkit.block.CraftSign;
import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerAnimationEvent;
import org.bukkit.event.player.PlayerAnimationType;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerEggThrowEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerListener;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerLoginEvent.Result;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.ItemStack;
public class EssentialsPlayerListener extends PlayerListener
{
private static final Logger logger = Logger.getLogger("Minecraft");
private final Server server;
private final IEssentials ess;
private final EssentialsBlockListener essBlockListener;
public EssentialsPlayerListener(IEssentials parent)
{
this.ess = parent;
this.server = parent.getServer();
essBlockListener = new EssentialsBlockListener(parent);
}
@Override
public void onPlayerRespawn(PlayerRespawnEvent event)
{
User user = ess.getUser(event.getPlayer());
user.setDisplayName(user.getNick());
updateCompass(user);
if (user.isJailed() && user.getJail() != null && !user.getJail().isEmpty()) {
try
{
event.setRespawnLocation(ess.getJail().getJail(user.getJail()));
}
catch (Exception ex)
{
}
}
}
@Override
public void onPlayerChat(PlayerChatEvent event)
{
User user = ess.getUser(event.getPlayer());
if (user.isMuted())
{
event.setCancelled(true);
logger.info(Util.format("mutedUserSpeaks", user.getName()));
}
Iterator<Player> it = event.getRecipients().iterator();
while (it.hasNext())
{
User u = ess.getUser(it.next());
if (u.isIgnoredPlayer(user.getName()))
{
it.remove();
}
}
}
@Override
public void onPlayerMove(PlayerMoveEvent event)
{
if (event.isCancelled())
{
return;
}
final User user = ess.getUser(event.getPlayer());
if (!ess.getSettings().getNetherPortalsEnabled())
{
return;
}
final Block block = event.getPlayer().getWorld().getBlockAt(event.getTo().getBlockX(), event.getTo().getBlockY(), event.getTo().getBlockZ());
List<World> worlds = server.getWorlds();
if (block.getType() == Material.PORTAL && worlds.size() > 1 && user.isAuthorized("essentials.portal"))
{
if (user.getJustPortaled())
{
return;
}
Location loc = event.getTo();
World nether = server.getWorld(ess.getSettings().getNetherName());
if (nether == null) {
for (World world : worlds)
{
if (world.getEnvironment() == World.Environment.NETHER) {
nether = world;
break;
}
}
if (nether == null) {
return;
}
}
final World world = user.getWorld() == nether ? worlds.get(0) : nether;
double factor;
if (user.getWorld().getEnvironment() == World.Environment.NETHER && world.getEnvironment() == World.Environment.NORMAL)
{
factor = ess.getSettings().getNetherRatio();
}
else if (user.getWorld().getEnvironment() != world.getEnvironment())
{
factor = 1.0 / ess.getSettings().getNetherRatio();
}
else
{
factor = 1.0;
}
int x = loc.getBlockX();
int y = loc.getBlockY();
int z = loc.getBlockZ();
if (user.getWorld().getBlockAt(x, y, z - 1).getType() == Material.PORTAL)
{
z--;
}
if (user.getWorld().getBlockAt(x - 1, y, z).getType() == Material.PORTAL)
{
x--;
}
x = (int)(x * factor);
z = (int)(z * factor);
loc = new Location(world, x + .5, y, z + .5);
Block dest = world.getBlockAt(x, y, z);
NetherPortal portal = NetherPortal.findPortal(dest);
if (portal == null)
{
if (world.getEnvironment() == World.Environment.NETHER || ess.getSettings().getGenerateExitPortals())
{
portal = NetherPortal.createPortal(dest);
logger.info(Util.format("userCreatedPortal", event.getPlayer().getName()));
user.sendMessage(Util.i18n("generatingPortal"));
loc = portal.getSpawn();
}
}
else
{
logger.info(Util.format("userUsedPortal", event.getPlayer().getName()));
user.sendMessage(Util.i18n("usingPortal"));
loc = portal.getSpawn();
}
event.setFrom(loc);
event.setTo(loc);
try
{
user.getTeleport().now(loc, new Charge("portal", ess));
}
catch (Exception ex)
{
user.sendMessage(ex.getMessage());
}
user.setJustPortaled(true);
user.sendMessage(Util.i18n("teleportingPortal"));
event.setCancelled(true);
return;
}
user.setJustPortaled(false);
}
@Override
public void onPlayerQuit(PlayerQuitEvent event)
{
User user = ess.getUser(event.getPlayer());
if (user.getSavedInventory() != null)
{
user.getInventory().setContents(user.getSavedInventory());
user.setSavedInventory(null);
}
if (!ess.getSettings().getReclaimSetting())
{
return;
}
user.dispose();
Thread thread = new Thread(new Runnable()
{
public void run()
{
try
{
Thread.sleep(1000);
Runtime rt = Runtime.getRuntime();
double mem = rt.freeMemory();
rt.runFinalization();
rt.gc();
mem = rt.freeMemory() - mem;
mem /= 1024 * 1024;
logger.log(Level.INFO, Util.format("freedMemory", mem));
}
catch (InterruptedException ex)
{
return;
}
}
});
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
@Override
public void onPlayerJoin(PlayerJoinEvent event)
{
ess.getBackup().onPlayerJoin();
User user = ess.getUser(event.getPlayer());
//we do not know the ip address on playerlogin so we need to do this here.
if (user.isIpBanned())
{
String banReason = user.getBanReason();
user.kickPlayer(banReason != null && !banReason.isEmpty() ? banReason : Util.i18n("defaultBanReason"));
return;
}
user.setDisplayName(user.getNick());
if (!ess.getSettings().isCommandDisabled("motd") && user.isAuthorized("essentials.motd"))
{
for (String m : ess.getMotd(user, null))
{
if (m == null)
{
continue;
}
user.sendMessage(m);
}
}
if (!ess.getSettings().isCommandDisabled("mail") && user.isAuthorized("essentials.mail"))
{
List<String> mail = user.getMails();
if (mail.isEmpty())
{
user.sendMessage(Util.i18n("noNewMail"));
}
else
{
user.sendMessage(Util.format("youHaveNewMail", mail.size()));
}
}
}
@Override
public void onPlayerLogin(PlayerLoginEvent event)
{
if (event.getResult() != Result.ALLOWED)
{
return;
}
User user = ess.getUser(event.getPlayer());
user.setNPC(false);
if (user.isBanned())
{
String banReason = user.getBanReason();
event.disallow(Result.KICK_BANNED, banReason != null && !banReason.isEmpty() ? banReason : Util.i18n("defaultBanReason"));
return;
}
if (server.getOnlinePlayers().length >= server.getMaxPlayers() && !user.isAuthorized("essentials.joinfullserver"))
{
event.disallow(Result.KICK_FULL, Util.i18n("serverFull"));
return;
}
user.setLastLogin(System.currentTimeMillis());
updateCompass(user);
}
private void updateCompass(User user)
{
try
{
user.setCompassTarget(user.getHome(user.getLocation()));
}
catch (Exception ex)
{
}
}
@Override
public void onPlayerTeleport(PlayerTeleportEvent event)
{
if (event.isCancelled())
{
return;
}
User user = ess.getUser(event.getPlayer());
if (!user.isJailed() || user.getJail() == null || user.getJail().isEmpty())
{
return;
}
try
{
event.setTo(ess.getJail().getJail(user.getJail()));
}
catch (Exception ex)
{
logger.log(Level.WARNING, Util.i18n("returnPlayerToJailError"), ex);
}
user.sendMessage(Util.i18n("jailMessage"));
}
@Override
public void onPlayerInteract(PlayerInteractEvent event)
{
if (event.isCancelled())
{
return;
}
if (event.getAction() != Action.RIGHT_CLICK_BLOCK)
{
return;
}
User user = ess.getUser(event.getPlayer());
if (user.isJailed())
{
event.setCancelled(true);
return;
}
if (!ess.getSettings().areSignsDisabled() && EssentialsBlockListener.protectedBlocks.contains(event.getClickedBlock().getType()))
{
if (!user.isAuthorized("essentials.signs.protection.override"))
{
if (essBlockListener.isBlockProtected(event.getClickedBlock(), user))
{
event.setCancelled(true);
user.sendMessage(Util.format("noAccessPermission", event.getClickedBlock().getType().toString().toLowerCase()));
return;
}
}
}
if (ess.getSettings().getBedSetsHome() && event.getClickedBlock().getType() == Material.BED_BLOCK)
{
try
{
user.setHome();
user.sendMessage(Util.i18n("homeSetToBed"));
}
catch (Throwable ex)
{
}
}
if (ess.getSettings().areSignsDisabled())
{
return;
}
if (event.getClickedBlock().getType() != Material.WALL_SIGN && event.getClickedBlock().getType() != Material.SIGN_POST)
{
return;
}
Sign sign = new CraftSign(event.getClickedBlock());
try
{
if (sign.getLine(0).equals("§1[Free]") && user.isAuthorized("essentials.signs.free.use"))
{
ItemStack item = ItemDb.get(sign.getLine(1));
CraftInventoryPlayer inv = new CraftInventoryPlayer(new InventoryPlayer(user.getHandle()));
inv.clear();
item.setAmount(9 * 4 * 64);
inv.addItem(item);
user.showInventory(inv);
return;
}
if (sign.getLine(0).equals("§1[Disposal]") && user.isAuthorized("essentials.signs.disposal.use"))
{
CraftInventoryPlayer inv = new CraftInventoryPlayer(new InventoryPlayer(user.getHandle()));
inv.clear();
user.showInventory(inv);
return;
}
if (sign.getLine(0).equals("§1[Heal]") && user.isAuthorized("essentials.signs.heal.use"))
{
if (!sign.getLine(1).isEmpty())
{
String[] l1 = sign.getLine(1).split("[ :-]+");
boolean m1 = l1[0].matches("^[^0-9][\\.0-9]+");
double q1 = Double.parseDouble(m1 ? l1[0].substring(1) : l1[0]);
if (!m1 && (int)q1 < 1)
{
throw new Exception(Util.i18n("moreThanZero"));
}
if (m1)
{
if (user.getMoney() < q1)
{
throw new Exception(Util.i18n("notEnoughMoney"));
}
user.takeMoney(q1);
user.sendMessage(Util.format("moneyTaken", Util.formatCurrency(q1)));
}
else
{
ItemStack i = ItemDb.get(l1[1], (int)q1);
if (!InventoryWorkaround.containsItem(user.getInventory(), true, i))
{
throw new Exception(Util.format("missingItems", (int)q1, l1[1]));
}
InventoryWorkaround.removeItem(user.getInventory(), true, i);
user.updateInventory();
}
}
user.setHealth(20);
user.sendMessage(Util.i18n("youAreHealed"));
return;
}
if (sign.getLine(0).equals("§1[Mail]") && user.isAuthorized("essentials.signs.mail.use") && user.isAuthorized("essentials.mail"))
{
List<String> mail = user.getMails();
if (mail.isEmpty())
{
user.sendMessage(Util.i18n("noNewMail"));
return;
}
for (String s : mail)
{
user.sendMessage(s);
}
user.sendMessage(Util.i18n("markMailAsRead"));
return;
}
if (sign.getLine(0).equals("§1[Balance]") && user.isAuthorized("essentials.signs.balance.use"))
{
user.sendMessage(Util.format("balance", user.getMoney()));
return;
}
if (sign.getLine(0).equals("§1[Warp]"))
{
if (!sign.getLine(2).isEmpty())
{
if (sign.getLine(2).equals("§2Everyone"))
{
Charge charge = chargeUserForWarp(sign, user);
user.getTeleport().warp(sign.getLine(1), charge);
return;
}
if (user.inGroup(sign.getLine(2)))
{
Charge charge = chargeUserForWarp(sign, user);
user.getTeleport().warp(sign.getLine(1), charge);
return;
}
}
if (user.isAuthorized("essentials.signs.warp.use")
&& (!ess.getSettings().getPerWarpPermission() || user.isAuthorized("essentials.warp." + sign.getLine(1))))
{
Charge charge = chargeUserForWarp(sign, user);
user.getTeleport().warp(sign.getLine(1), charge);
}
return;
}
}
catch (Throwable ex)
{
user.sendMessage(Util.format("errorWithMessage", ex.getMessage()));
if (ess.getSettings().isDebug())
{
logger.log(Level.WARNING, ex.getMessage(), ex);
}
}
}
private Charge chargeUserForWarp(Sign sign, User user) throws Exception
{
if (!sign.getLine(3).isEmpty())
{
String[] l1 = sign.getLine(3).split("[ :-]+");
boolean m1 = l1[0].matches("^[^0-9][\\.0-9]+");
double q1 = Double.parseDouble(m1 ? l1[0].substring(1) : l1[0]);
if (!m1 && (int)q1 < 1)
{
throw new Exception(Util.i18n("moreThanZero"));
}
if (m1)
{
return new Charge(q1, ess);
}
else
{
ItemStack i = ItemDb.get(l1[1], (int)q1);
return new Charge(i, ess);
}
}
return new Charge("warpsign", ess);
}
@Override
public void onPlayerEggThrow(PlayerEggThrowEvent event)
{
User user = ess.getUser(event.getPlayer());
ItemStack is = new ItemStack(Material.EGG, 1);
if (user.hasUnlimited(is))
{
user.getInventory().addItem(is);
user.updateInventory();
}
}
@Override
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event)
{
final User user = ess.getUser(event.getPlayer());
if (user.hasUnlimited(new ItemStack(event.getBucket())))
{
event.getItemStack().setType(event.getBucket());
ess.scheduleSyncDelayedTask(new Runnable()
{
public void run()
{
user.updateInventory();
}
});
}
}
@Override
public void onPlayerAnimation(PlayerAnimationEvent event)
{
usePowertools(event);
}
private void usePowertools(PlayerAnimationEvent event)
{
if (event.getAnimationType() != PlayerAnimationType.ARM_SWING)
{
return;
}
User user = ess.getUser(event.getPlayer());
ItemStack is = user.getItemInHand();
if (is == null || is.getType() == Material.AIR)
{
return;
}
String command = user.getPowertool(is);
if (command == null || command.isEmpty())
{
return;
}
if (command.matches(".*\\{player\\}.*"))
{
//user.sendMessage("Click a player to use this command");
return;
}
if (command.startsWith("c:"))
{
for (Player p : server.getOnlinePlayers())
{
p.sendMessage(user.getDisplayName() + ":" + command.substring(2));
}
}
else
{
user.getServer().dispatchCommand(user, command);
}
}
}
@@ -1,45 +0,0 @@
package com.earth2me.essentials;
import com.earth2me.essentials.register.payment.Methods;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.event.server.PluginDisableEvent;
import org.bukkit.event.server.PluginEnableEvent;
import org.bukkit.event.server.ServerListener;
public class EssentialsPluginListener extends ServerListener
{
private final Methods methods;
private static final Logger logger = Logger.getLogger("Minecraft");
public EssentialsPluginListener(Methods methods)
{
this.methods = methods;
}
@Override
public void onPluginEnable(PluginEnableEvent event)
{
if (!methods.hasMethod())
{
if (methods.setMethod(event.getPlugin()))
{
logger.log(Level.INFO, "[Essentials] Payment method found (" + methods.getMethod().getName() + " version: " + methods.getMethod().getVersion() + ")");
}
}
}
@Override
public void onPluginDisable(PluginDisableEvent event)
{
// Check to see if the plugin thats being disabled is the one we are using
if (methods != null && methods.hasMethod())
{
if (methods.checkDisabled(event.getPlugin()))
{
logger.log(Level.INFO, "[Essentials] Payment method was disabled. No longer accepting payments.");
}
}
}
}
@@ -1,81 +1,82 @@
package com.earth2me.essentials;
import java.io.File;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.ISettings;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.perm.Permissions;
import com.earth2me.essentials.user.UserData.TimestampType;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.bukkit.craftbukkit.CraftServer;
import java.util.logging.Level;
import org.bukkit.entity.Player;
public class EssentialsTimer implements Runnable, IConf
public class EssentialsTimer implements Runnable
{
private final IEssentials ess;
private final Set<User> allUsers = new HashSet<User>();
EssentialsTimer(IEssentials ess)
private final transient IEssentials ess;
private final transient Set<IUser> onlineUsers = new HashSet<IUser>();
EssentialsTimer(final IEssentials ess)
{
this.ess = ess;
File userdir = new File(ess.getDataFolder(), "userdata");
if (!userdir.exists()) {
return;
}
for (String string : userdir.list())
{
if (!string.endsWith(".yml")) {
continue;
}
String name = string.substring(0, string.length()-4);
User u = ess.getUser(new OfflinePlayer(name));
allUsers.add(u);
}
}
@Override
public void run()
{
long currentTime = System.currentTimeMillis();
final long currentTime = System.currentTimeMillis();
for (Player player : ess.getServer().getOnlinePlayers())
{
User u = ess.getUser(player);
allUsers.add(u);
u.setLastActivity(currentTime);
}
for (User user: allUsers) {
if (user.getBanTimeout() > 0 && user.getBanTimeout() < currentTime) {
user.setBanTimeout(0);
((CraftServer)ess.getServer()).getHandle().b(user.getName());
ess.loadBanList();
}
if (user.getMuteTimeout() > 0 && user.getMuteTimeout() < currentTime && user.isMuted()) {
user.setMuteTimeout(0);
user.sendMessage(Util.i18n("canTalkAgain"));
user.setMuted(false);
}
if (user.getJailTimeout() > 0 && user.getJailTimeout() < currentTime && user.isJailed()) {
user.setJailTimeout(0);
user.setJailed(false);
user.sendMessage(Util.i18n("haveBeenReleased"));
user.setJail(null);
try
{
final IUser user = ess.getUser(player);
onlineUsers.add(user);
user.setLastOnlineActivity(currentTime);
user.checkActivity();
boolean mailDisabled = false;
ISettings settings = ess.getSettings();
settings.acquireReadLock();
try
{
user.getTeleport().back();
mailDisabled = settings.getData().getCommands().isDisabled("mail");
}
catch (Exception ex)
finally
{
settings.unlock();
}
// New mail notification
if (user != null && !mailDisabled && Permissions.MAIL.isAuthorized(user) && !user.gotMailInfo())
{
final List<String> mail = user.getMails();
if (mail != null && !mail.isEmpty())
{
user.sendMessage(_("youHaveNewMail", mail.size()));
}
}
}
if (user.getLastActivity() < currentTime && user.getLastActivity() > user.getLastLogout()) {
user.setLastLogout(user.getLastActivity());
catch (Exception e)
{
ess.getLogger().log(Level.WARNING, "EssentialsTimer Error:", e);
}
}
}
public void reloadConfig()
{
for (User user : allUsers)
final Iterator<IUser> iterator = onlineUsers.iterator();
while (iterator.hasNext())
{
user.reloadConfig();
final IUser user = iterator.next();
if (user.getLastOnlineActivity() < currentTime && user.getLastOnlineActivity() > user.getTimestamp(TimestampType.LOGOUT))
{
user.setTimestamp(TimestampType.LOGOUT, user.getLastOnlineActivity());
iterator.remove();
continue;
}
user.checkMuteTimeout(currentTime);
user.checkJailTimeout(currentTime);
}
}
}
@@ -1,68 +0,0 @@
package com.earth2me.essentials;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.logging.Level;
import java.util.logging.Logger;
class EssentialsUpdateTimer implements Runnable
{
private URL url;
private final Essentials ess;
private static final Logger logger = Logger.getLogger("Minecraft");
public EssentialsUpdateTimer(Essentials ess)
{
this.ess = ess;
try
{
url = new URL("http://127.0.0.1:8080/check");
}
catch (MalformedURLException ex)
{
logger.log(Level.SEVERE, "Invalid url!", ex);
}
}
public void run()
{
try
{
StringBuilder sb = new StringBuilder();
sb.append("v=").append(URLEncoder.encode(ess.getDescription().getVersion(),"UTF-8"));
sb.append("&b=").append(URLEncoder.encode(ess.getServer().getVersion(),"UTF-8"));
sb.append("&jv=").append(URLEncoder.encode(System.getProperty("java.version"),"UTF-8"));
sb.append("&l=").append(URLEncoder.encode(Util.getCurrentLocale().toString(),"UTF-8"));
sb.append("&on=").append(URLEncoder.encode(System.getProperty("os.name"),"UTF-8"));
sb.append("&ov=").append(URLEncoder.encode(System.getProperty("os.version"),"UTF-8"));
for (BigInteger bigInteger : ess.getErrors().keySet())
{
sb.append("&e[]=").append(bigInteger.toString(36));
}
URLConnection conn = url.openConnection();
conn.setConnectTimeout(10000);
conn.setDoOutput(true);
conn.connect();
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(sb.toString());
wr.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String ret = br.readLine();
wr.close();
br.close();
logger.log(Level.INFO, ret);
}
catch (IOException ex)
{
logger.log(Level.SEVERE, "Failed to open connection", ex);
}
}
}
@@ -1,420 +0,0 @@
package com.earth2me.essentials;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.inventory.ItemStack;
public class EssentialsUpgrade
{
private static boolean alreadyRun = false;
private final static Logger logger = Logger.getLogger("Minecraft");
private final IEssentials ess;
EssentialsUpgrade(String version, IEssentials essentials)
{
ess = essentials;
if (alreadyRun)
{
return;
}
alreadyRun = true;
}
private void moveWorthValuesToWorthYml()
{
try
{
File configFile = new File(ess.getDataFolder(), "config.yml");
if (!configFile.exists())
{
return;
}
EssentialsConf conf = new EssentialsConf(configFile);
conf.load();
Worth w = new Worth(ess.getDataFolder());
boolean found = false;
for (Material mat : Material.values())
{
int id = mat.getId();
double value = conf.getDouble("worth-" + id, Double.NaN);
if (!Double.isNaN(value))
{
found = true;
w.setPrice(new ItemStack(mat, 1, (short)0, (byte)0), value);
}
}
if (found)
{
removeLinesFromConfig(configFile, "\\s*#?\\s*worth-[0-9]+.*", "# Worth values have been moved to worth.yml");
}
}
catch (Throwable e)
{
logger.log(Level.SEVERE, Util.i18n("upgradingFilesError"), e);
}
}
private void removeLinesFromConfig(File file, String regex, String info) throws Exception
{
boolean needUpdate = false;
BufferedReader br = new BufferedReader(new FileReader(file));
File tempFile = File.createTempFile("essentialsupgrade", ".tmp.yml", ess.getDataFolder());
BufferedWriter bw = new BufferedWriter(new FileWriter(tempFile));
do
{
String line = br.readLine();
if (line == null)
{
break;
}
if (line.matches(regex))
{
if (!needUpdate && info != null)
{
bw.write(info, 0, info.length());
bw.newLine();
}
needUpdate = true;
}
else
{
if (line.endsWith("\r\n"))
{
bw.write(line, 0, line.length() - 2);
}
else if (line.endsWith("\r") || line.endsWith("\n"))
{
bw.write(line, 0, line.length() - 1);
}
else
{
bw.write(line, 0, line.length());
}
bw.newLine();
}
}
while (true);
br.close();
bw.close();
if (needUpdate)
{
if (!file.renameTo(new File(file.getParentFile(), file.getName().concat("." + System.currentTimeMillis() + ".upgradebackup"))))
{
throw new Exception(Util.i18n("configFileMoveError"));
}
if (!tempFile.renameTo(file))
{
throw new Exception(Util.i18n("configFileRenameError"));
}
} else {
tempFile.delete();
}
}
private void updateUsersToNewDefaultHome()
{
File userdataFolder = new File(ess.getDataFolder(), "userdata");
if (!userdataFolder.exists() || !userdataFolder.isDirectory())
{
return;
}
File[] userFiles = userdataFolder.listFiles();
for (File file : userFiles)
{
if (!file.isFile() || !file.getName().endsWith(".yml"))
{
continue;
}
EssentialsConf config = new EssentialsConf(file);
try
{
config.load();
if (config.hasProperty("home") && !config.hasProperty("home.default"))
{
@SuppressWarnings("unchecked")
List<Object> vals = (List<Object>)config.getProperty("home");
if (vals == null) {
continue;
}
World world = ess.getServer().getWorlds().get(0);
if (vals.size() > 5)
{
world = ess.getServer().getWorld((String)vals.get(5));
}
if (world != null)
{
Location loc = new Location(
world,
((Number)vals.get(0)).doubleValue(),
((Number)vals.get(1)).doubleValue(),
((Number)vals.get(2)).doubleValue(),
((Number)vals.get(3)).floatValue(),
((Number)vals.get(4)).floatValue());
String worldName = world.getName().toLowerCase();
if (worldName != null && !worldName.isEmpty())
{
config.removeProperty("home");
config.setProperty("home.default", worldName);
config.setProperty("home.worlds." + worldName, loc);
config.save();
}
}
}
}
catch (RuntimeException ex)
{
logger.log(Level.INFO, "File: "+file.toString());
throw ex;
}
}
}
private void moveUsersDataToUserdataFolder()
{
File usersFile = new File(ess.getDataFolder(), "users.yml");
if (!usersFile.exists())
{
return;
}
EssentialsConf usersConfig = new EssentialsConf(usersFile);
usersConfig.load();
for (String username : usersConfig.getKeys(null))
{
User user = new User(new OfflinePlayer(username), ess);
String nickname = usersConfig.getString(username + ".nickname");
if (nickname != null && !nickname.isEmpty() && !nickname.equals(username))
{
user.setNickname(nickname);
}
List<String> mails = usersConfig.getStringList(username + ".mail", null);
if (mails != null && !mails.isEmpty())
{
user.setMails(mails);
}
if (!user.hasHome())
{
@SuppressWarnings("unchecked")
List<Object> vals = (List<Object>)usersConfig.getProperty(username + ".home");
if (vals != null) {
World world = ess.getServer().getWorlds().get(0);
if (vals.size() > 5)
{
world = getFakeWorld((String)vals.get(5));
}
if (world != null)
{
user.setHome(new Location(world,
((Number)vals.get(0)).doubleValue(),
((Number)vals.get(1)).doubleValue(),
((Number)vals.get(2)).doubleValue(),
((Number)vals.get(3)).floatValue(),
((Number)vals.get(4)).floatValue()), true);
}
}
}
}
usersFile.renameTo(new File(usersFile.getAbsolutePath() + ".old"));
}
private void convertWarps()
{
File warpsFolder = new File(ess.getDataFolder(), "warps");
if (!warpsFolder.exists())
{
warpsFolder.mkdirs();
}
File[] listOfFiles = warpsFolder.listFiles();
if (listOfFiles.length >= 1)
{
for (int i = 0; i < listOfFiles.length; i++)
{
String filename = listOfFiles[i].getName();
if (listOfFiles[i].isFile() && filename.endsWith(".dat"))
{
try
{
BufferedReader rx = new BufferedReader(new FileReader(listOfFiles[i]));
double x, y, z;
float yaw, pitch;
String worldName;
try
{
if (!rx.ready()) continue;
x = Double.parseDouble(rx.readLine().trim());
if (!rx.ready()) continue;
y = Double.parseDouble(rx.readLine().trim());
if (!rx.ready()) continue;
z = Double.parseDouble(rx.readLine().trim());
if (!rx.ready()) continue;
yaw = Float.parseFloat(rx.readLine().trim());
if (!rx.ready()) continue;
pitch = Float.parseFloat(rx.readLine().trim());
worldName = rx.readLine();
}
finally {
rx.close();
}
World w = null;
for (World world : ess.getServer().getWorlds())
{
if (world.getEnvironment() != World.Environment.NETHER)
{
w = world;
break;
}
}
if (worldName != null)
{
worldName = worldName.trim();
World w1 = null;
w1 = getFakeWorld(worldName);
if (w1 != null)
{
w = w1;
}
}
Location loc = new Location(w, x, y, z, yaw, pitch);
ess.getWarps().setWarp(filename.substring(0, filename.length() - 4), loc);
if (!listOfFiles[i].renameTo(new File(warpsFolder, filename + ".old")))
{
throw new Exception(Util.format("fileRenameError", filename));
}
}
catch (Exception ex)
{
logger.log(Level.SEVERE, null, ex);
}
}
}
}
File warpFile = new File(ess.getDataFolder(), "warps.txt");
if (warpFile.exists())
{
try
{
BufferedReader rx = new BufferedReader(new FileReader(warpFile));
try
{
for (String[] parts = new String[0]; rx.ready(); parts = rx.readLine().split(":"))
{
if (parts.length < 6)
{
continue;
}
String name = parts[0];
double x = Double.parseDouble(parts[1].trim());
double y = Double.parseDouble(parts[2].trim());
double z = Double.parseDouble(parts[3].trim());
float yaw = Float.parseFloat(parts[4].trim());
float pitch = Float.parseFloat(parts[5].trim());
if (name.isEmpty())
{
continue;
}
World w = null;
for (World world : ess.getServer().getWorlds())
{
if (world.getEnvironment() != World.Environment.NETHER)
{
w = world;
break;
}
}
Location loc = new Location(w, x, y, z, yaw, pitch);
ess.getWarps().setWarp(name, loc);
if (!warpFile.renameTo(new File(ess.getDataFolder(), "warps.txt.old")))
{
throw new Exception(Util.format("fileRenameError", "warps.txt"));
}
}
}
finally
{
rx.close();
}
}
catch (Exception ex)
{
logger.log(Level.SEVERE, null, ex);
}
}
}
private void sanitizeAllUserFilenames()
{
File usersFolder = new File(ess.getDataFolder(), "userdata");
if (!usersFolder.exists())
{
return;
}
File[] listOfFiles = usersFolder.listFiles();
for (int i = 0; i < listOfFiles.length; i++)
{
String filename = listOfFiles[i].getName();
if (!listOfFiles[i].isFile() || !filename.endsWith(".yml"))
{
continue;
}
String sanitizedFilename = Util.sanitizeFileName(filename.substring(0, filename.length() - 4)) + ".yml";
if (sanitizedFilename.equals(filename))
{
continue;
}
File tmpFile = new File(listOfFiles[i].getParentFile(), sanitizedFilename + ".tmp");
File newFile = new File(listOfFiles[i].getParentFile(), sanitizedFilename);
if (!listOfFiles[i].renameTo(tmpFile)) {
logger.log(Level.WARNING, Util.format("userdataMoveError", filename, sanitizedFilename));
continue;
}
if (newFile.exists())
{
logger.log(Level.WARNING, Util.format("duplicatedUserdata", filename, sanitizedFilename));
continue;
}
if (!tmpFile.renameTo(newFile)) {
logger.log(Level.WARNING, Util.format("userdataMoveBackError", sanitizedFilename, sanitizedFilename));
}
}
}
private World getFakeWorld(String name)
{
File bukkitDirectory = ess.getDataFolder().getParentFile().getParentFile();
File worldDirectory = new File(bukkitDirectory, name);
if (worldDirectory.exists() && worldDirectory.isDirectory())
{
return new FakeWorld(worldDirectory.getName(), World.Environment.NORMAL);
}
return null;
}
public void beforeSettings()
{
if (!ess.getDataFolder().exists())
{
ess.getDataFolder().mkdirs();
}
moveWorthValuesToWorthYml();
}
public void afterSettings()
{
sanitizeAllUserFilenames();
updateUsersToNewDefaultHome();
moveUsersDataToUserdataFolder();
convertWarps();
}
}
@@ -0,0 +1,89 @@
package com.earth2me.essentials;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class ExecuteTimer
{
private final transient List<ExecuteRecord> times;
private final transient DecimalFormat decimalFormat = new DecimalFormat("#0.000", DecimalFormatSymbols.getInstance(Locale.US));
public ExecuteTimer()
{
times = new ArrayList<ExecuteRecord>();
}
public void start()
{
times.clear();
mark("start");
}
public void mark(final String label)
{
if (!times.isEmpty() || "start".equals(label))
{
times.add(new ExecuteRecord(label, System.nanoTime()));
}
}
public String end()
{
final StringBuilder output = new StringBuilder();
output.append("execution time: ");
String mark;
long time0 = 0;
long time1 = 0;
long time2 = 0;
double duration;
for (ExecuteRecord pair : times)
{
mark = (String)pair.getMark();
time2 = (Long)pair.getTime();
if (time1 > 0)
{
duration = (time2 - time1)/1000000.0;
output.append(mark).append(": ").append(decimalFormat.format(duration)).append("ms - ");
}
else
{
time0 = time2;
}
time1 = time2;
}
duration = (time1 - time0)/1000000.0;
output.append("Total: ").append(decimalFormat.format(duration)).append("ms");
times.clear();
return output.toString();
}
static private class ExecuteRecord
{
private final String mark;
private final long time;
public ExecuteRecord(final String mark, final long time)
{
this.mark = mark;
this.time = time;
}
public String getMark()
{
return mark;
}
public long getTime()
{
return time;
}
}
}
@@ -0,0 +1,177 @@
package com.earth2me.essentials;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.II18n;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.MessageFormat;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class I18n implements II18n
{
private static I18n instance;
private static final String MESSAGES = "messages";
private final transient Locale defaultLocale = Locale.getDefault();
private transient Locale currentLocale = defaultLocale;
private transient ResourceBundle customBundle;
private transient ResourceBundle localeBundle;
private final transient ResourceBundle defaultBundle;
private final transient Map<String, MessageFormat> messageFormatCache = new HashMap<String, MessageFormat>();
private final transient IEssentials ess;
public I18n(final IEssentials ess)
{
this.ess = ess;
customBundle = ResourceBundle.getBundle(MESSAGES, defaultLocale, new FileResClassLoader(I18n.class.getClassLoader(), ess));
localeBundle = ResourceBundle.getBundle(MESSAGES, defaultLocale);
defaultBundle = ResourceBundle.getBundle(MESSAGES, Locale.ENGLISH);
}
public void onEnable()
{
instance = this;
}
public void onDisable()
{
instance = null;
}
@Override
public Locale getCurrentLocale()
{
return currentLocale;
}
public String translate(final String string)
{
try
{
try
{
return customBundle.getString(string);
}
catch (MissingResourceException ex)
{
return localeBundle.getString(string);
}
}
catch (MissingResourceException ex)
{
Logger.getLogger("Minecraft").log(Level.WARNING, String.format("Missing translation key \"%s\" in translation file %s", ex.getKey(), localeBundle.getLocale().toString()), ex);
return defaultBundle.getString(string);
}
}
public static String _(final String string, final Object... objects)
{
if (instance == null) {
return "";
}
if (objects.length == 0)
{
return instance.translate(string);
}
else
{
return instance.format(string, objects);
}
}
public String format(final String string, final Object... objects)
{
final String format = translate(string);
MessageFormat messageFormat = messageFormatCache.get(format);
if (messageFormat == null)
{
messageFormat = new MessageFormat(format);
messageFormatCache.put(format, messageFormat);
}
return messageFormat.format(objects);
}
public void updateLocale(final String loc)
{
if (loc == null || loc.isEmpty())
{
return;
}
final String[] parts = loc.split("[_\\.]");
if (parts.length == 1)
{
currentLocale = new Locale(parts[0]);
}
if (parts.length == 2)
{
currentLocale = new Locale(parts[0], parts[1]);
}
if (parts.length == 3)
{
currentLocale = new Locale(parts[0], parts[1], parts[2]);
}
Logger.getLogger("Minecraft").log(Level.INFO, String.format("Using locale %s", currentLocale.toString()));
customBundle = ResourceBundle.getBundle(MESSAGES, currentLocale, new FileResClassLoader(I18n.class.getClassLoader(), ess));
localeBundle = ResourceBundle.getBundle(MESSAGES, currentLocale);
}
public static String capitalCase(final String input)
{
return input == null || input.length() == 0
? input
: input.toUpperCase(Locale.ENGLISH).charAt(0)
+ input.toLowerCase(Locale.ENGLISH).substring(1);
}
private static class FileResClassLoader extends ClassLoader
{
private final transient File dataFolder;
public FileResClassLoader(final ClassLoader classLoader, final IEssentials ess)
{
super(classLoader);
this.dataFolder = ess.getDataFolder();
}
@Override
public URL getResource(final String string)
{
final File file = new File(dataFolder, string);
if (file.exists())
{
try
{
return file.toURI().toURL();
}
catch (MalformedURLException ex)
{
}
}
return super.getResource(string);
}
@Override
public InputStream getResourceAsStream(final String string)
{
final File file = new File(dataFolder, string);
if (file.exists())
{
try
{
return new FileInputStream(file);
}
catch (FileNotFoundException ex)
{
}
}
return super.getResourceAsStream(string);
}
}
}
@@ -1,5 +0,0 @@
package com.earth2me.essentials;
public interface IConf {
public void reloadConfig();
}
@@ -1,68 +0,0 @@
package com.earth2me.essentials;
import com.earth2me.essentials.register.payment.Methods;
import java.io.File;
import java.util.List;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.craftbukkit.scheduler.CraftScheduler;
import org.bukkit.plugin.PluginDescriptionFile;
public interface IEssentials
{
void addReloadListener(IConf listener);
void reload();
boolean onCommandEssentials(CommandSender sender, Command command, String commandLabel, String[] args, ClassLoader classLoader, String commandPath);
User getUser(Object base);
User getOfflineUser(String name);
World getWorld(String name);
int broadcastMessage(String name, String message);
Settings getSettings();
CraftScheduler getScheduler();
String[] getMotd(CommandSender sender, String def);
String[] getLines(CommandSender sender, String node, String def);
Jail getJail();
Warps getWarps();
Worth getWorth();
Backup getBackup();
Spawn getSpawn();
void loadBanList();
public boolean isRegisterFallbackEnabled();
public Methods getPaymentMethod();
Server getServer();
File getDataFolder();
PluginDescriptionFile getDescription();
int scheduleAsyncDelayedTask(Runnable run);
int scheduleSyncDelayedTask(Runnable run);
int scheduleSyncRepeatingTask(final Runnable run, long delay, long period);
List<String> getBans();
List<String> getBannedIps();
}
@@ -1,9 +0,0 @@
package com.earth2me.essentials;
import org.bukkit.command.CommandSender;
public interface IReplyTo {
public void setReplyTo(CommandSender user);
public CommandSender getReplyTo();
}
@@ -1,51 +0,0 @@
package com.earth2me.essentials;
import com.earth2me.essentials.commands.IEssentialsCommand;
import java.net.InetSocketAddress;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.inventory.PlayerInventory;
public interface IUser
{
int getHealth();
Location getLocation();
boolean isOnline();
void sendMessage(String string);
long getLastTeleportTimestamp();
boolean isAuthorized(String node);
boolean isAuthorized(IEssentialsCommand cmd);
void setLastTeleportTimestamp(long time);
Location getLastLocation();
Player getBase();
double getMoney();
void takeMoney(double value);
PlayerInventory getInventory();
void updateInventory();
String getGroup();
void setLastLocation();
Location getHome(Location location);
String getName();
InetSocketAddress getAddress();
String getDisplayName();
}
@@ -1,192 +0,0 @@
package com.earth2me.essentials;
import java.util.HashMap;
import org.bukkit.Location;
import org.bukkit.entity.Item;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
/*
* This class can be removed when
* https://github.com/Bukkit/CraftBukkit/pull/193
* is accepted to CraftBukkit
*/
public final class InventoryWorkaround
{
private InventoryWorkaround()
{
}
public static int first(Inventory ci, ItemStack item, boolean forceDurability, boolean forceAmount)
{
return next(ci, item, 0, forceDurability, forceAmount);
}
public static int next(Inventory ci, ItemStack item, int start, boolean forceDurability, boolean forceAmount)
{
ItemStack[] inventory = ci.getContents();
for (int i = start; i < inventory.length; i++)
{
ItemStack cItem = inventory[i];
if (cItem == null)
{
continue;
}
if (item.getTypeId() == cItem.getTypeId() && (!forceAmount || item.getAmount() == cItem.getAmount()) && (!forceDurability || cItem.getDurability() == item.getDurability()))
{
return i;
}
}
return -1;
}
public static HashMap<Integer, ItemStack> removeItem(Inventory ci, boolean forceDurability, ItemStack... items)
{
HashMap<Integer, ItemStack> leftover = new HashMap<Integer, ItemStack>();
// TODO: optimization
for (int i = 0; i < items.length; i++)
{
ItemStack item = items[i];
if (item == null)
{
continue;
}
int toDelete = item.getAmount();
while (true)
{
// Bail when done
if (toDelete <= 0)
{
break;
}
// get first Item, ignore the amount
int first = first(ci, item, forceDurability, false);
// Drat! we don't have this type in the inventory
if (first == -1)
{
item.setAmount(toDelete);
leftover.put(i, item);
break;
}
else
{
ItemStack itemStack = ci.getItem(first);
int amount = itemStack.getAmount();
if (amount <= toDelete)
{
toDelete -= amount;
// clear the slot, all used up
ci.clear(first);
}
else
{
// split the stack and store
itemStack.setAmount(amount - toDelete);
ci.setItem(first, itemStack);
toDelete = 0;
}
}
}
}
return leftover;
}
public static boolean containsItem(Inventory ci, boolean forceDurability, ItemStack... items)
{
HashMap<Integer, ItemStack> leftover = new HashMap<Integer, ItemStack>();
// TODO: optimization
// combine items
ItemStack[] combined = new ItemStack[items.length];
for (int i = 0; i < items.length; i++)
{
if (items[i] == null)
{
continue;
}
for (int j = 0; j < combined.length; j++)
{
if (combined[j] == null)
{
combined[j] = new ItemStack(items[i].getType(), items[i].getAmount(), items[i].getDurability());
break;
}
if (combined[j].getTypeId() == items[i].getTypeId() && (!forceDurability || combined[j].getDurability() == items[i].getDurability()))
{
combined[j].setAmount(combined[j].getAmount() + items[i].getAmount());
break;
}
}
}
for (int i = 0; i < combined.length; i++)
{
ItemStack item = combined[i];
if (item == null)
{
continue;
}
int mustHave = item.getAmount();
int position = 0;
while (true)
{
// Bail when done
if (mustHave <= 0)
{
break;
}
int slot = next(ci, item, position, forceDurability, false);
// Drat! we don't have this type in the inventory
if (slot == -1)
{
leftover.put(i, item);
break;
}
else
{
ItemStack itemStack = ci.getItem(slot);
int amount = itemStack.getAmount();
if (amount <= mustHave)
{
mustHave -= amount;
}
else
{
mustHave = 0;
}
position = slot + 1;
}
}
}
return leftover.isEmpty();
}
public static Item[] dropItem(Location loc, ItemStack itm)
{
int maxStackSize = itm.getType().getMaxStackSize();
int stacks = itm.getAmount() / maxStackSize;
int leftover = itm.getAmount() % maxStackSize;
Item[] itemStacks = new Item[stacks + (leftover > 0 ? 1 : 0)];
for (int i = 0; i < stacks; i++) {
itemStacks[i] = loc.getWorld().dropItem(loc, new ItemStack(itm.getType(), maxStackSize, itm.getDurability()));
}
if (leftover > 0) {
itemStacks[stacks] = loc.getWorld().dropItem(loc, new ItemStack(itm.getType(), leftover, itm.getDurability()));
}
return itemStacks;
}
}
@@ -1,114 +1,100 @@
package com.earth2me.essentials;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.logging.Logger;
import com.earth2me.essentials.storage.ManagedFile;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.IItemDb;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.perm.Permissions;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Pattern;
import lombok.Cleanup;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
public final class ItemDb
public class ItemDb implements IItemDb
{
private ItemDb()
private final transient IEssentials ess;
public ItemDb(final IEssentials ess)
{
this.ess = ess;
file = new ManagedFile("items.csv", ess);
}
private final static Logger logger = Logger.getLogger("Minecraft");
private static Map<String, Integer> items = new HashMap<String, Integer>();
private static Map<String, Short> durabilities = new HashMap<String, Short>();
private final transient Map<String, Long> items = new HashMap<String, Long>();
private final transient ManagedFile file;
private static final Pattern SPLIT = Pattern.compile("[^a-zA-Z0-9]");
public static void load(File folder, String fname) throws IOException
@Override
public void onReload()
{
folder.mkdirs();
File file = new File(folder, fname);
final List<String> lines = file.getLines();
if (!file.exists())
if (lines.isEmpty())
{
file.createNewFile();
InputStream res = ItemDb.class.getResourceAsStream("/items.csv");
FileWriter tx = null;
try
{
tx = new FileWriter(file);
for (int i = 0; (i = res.read()) > 0;)
{
tx.write(i);
}
tx.flush();
}
finally
{
try
{
res.close();
}
catch (Exception ex)
{
}
try
{
if (tx != null)
{
tx.close();
}
}
catch (Exception ex)
{
}
}
return;
}
BufferedReader rx = new BufferedReader(new FileReader(file));
try
{
items.clear();
items.clear();
for (int i = 0; rx.ready(); i++)
for (String line : lines)
{
line = line.trim();
if (line.length() > 0 && line.charAt(0) == '#')
{
try
{
String line = rx.readLine().trim().toLowerCase();
if (line.startsWith("#"))
{
continue;
}
String[] parts = line.split("[^a-z0-9]");
if (parts.length < 2)
{
continue;
}
int numeric = Integer.parseInt(parts[1]);
durabilities.put(parts[0].toLowerCase(), parts.length > 2 && !parts[2].equals("0") ? Short.parseShort(parts[2]) : 0);
items.put(parts[0].toLowerCase(), numeric);
}
catch (Exception ex)
{
logger.warning(Util.format("parseError", fname, i));
}
continue;
}
}
finally
{
rx.close();
final String[] parts = SPLIT.split(line);
if (parts.length < 2)
{
continue;
}
final long numeric = Integer.parseInt(parts[1]);
final long durability = parts.length > 2 && !(parts[2].length() == 1 && parts[2].charAt(0) == '0') ? Short.parseShort(parts[2]) : 0;
items.put(parts[0].toLowerCase(Locale.ENGLISH), numeric | (durability << 32));
}
}
public static ItemStack get(String id, int quantity) throws Exception
public ItemStack get(final String id, final IUser user) throws Exception
{
ItemStack retval = get(id.toLowerCase());
final ItemStack stack = get(id.toLowerCase(Locale.ENGLISH));
@Cleanup
com.earth2me.essentials.api.ISettings settings = ess.getSettings();
settings.acquireReadLock();
final int defaultStackSize = settings.getData().getGeneral().getDefaultStacksize();
if (defaultStackSize > 0)
{
stack.setAmount(defaultStackSize);
}
else
{
final int oversizedStackSize = settings.getData().getGeneral().getOversizedStacksize();
if (oversizedStackSize > 0 && Permissions.OVERSIZEDSTACKS.isAuthorized(user))
{
stack.setAmount(oversizedStackSize);
}
}
return stack;
}
public ItemStack get(final String id, final int quantity) throws Exception
{
final ItemStack retval = get(id.toLowerCase(Locale.ENGLISH));
retval.setAmount(quantity);
return retval;
}
public static ItemStack get(String id) throws Exception
public ItemStack get(final String id) throws Exception
{
int itemid = 0;
String itemname = null;
@@ -124,37 +110,43 @@ public final class ItemDb
}
else if (id.matches("^[^:+',;.]+[:+',;.]\\d+$"))
{
itemname = id.split("[:+',;.]")[0].toLowerCase();
itemname = id.split("[:+',;.]")[0].toLowerCase(Locale.ENGLISH);
metaData = Short.parseShort(id.split("[:+',;.]")[1]);
}
else
else
{
itemname = id.toLowerCase();
itemname = id.toLowerCase(Locale.ENGLISH);
}
if (itemname != null)
{
if (items.containsKey(itemname))
{
itemid = items.get(itemname);
if (durabilities.containsKey(itemname) && metaData == 0)
long item = items.get(itemname);
itemid = (int)(item & 0xffffffffL);
if (metaData == 0)
{
metaData = durabilities.get(itemname);
metaData = (short)((item >> 32) & 0xffffL);
}
}
else if (Material.getMaterial(itemname) != null)
{
itemid = Material.getMaterial(itemname).getId();
metaData = 0;
}
else
{
throw new Exception(Util.format("unknownItemName", id));
throw new Exception(_("unknownItemName", id));
}
}
Material mat = Material.getMaterial(itemid);
final Material mat = Material.getMaterial(itemid);
if (mat == null)
{
throw new Exception(Util.format("unknownItemId", itemid));
throw new Exception(_("unknownItemId", itemid));
}
ItemStack retval = new ItemStack(mat);
retval.setAmount(Essentials.getStatic().getSettings().getDefaultStackSize());
final ItemStack retval = new ItemStack(mat);
retval.setAmount(mat.getMaxStackSize());
retval.setDurability(metaData);
return retval;
}
@@ -1,94 +0,0 @@
package com.earth2me.essentials;
import java.io.File;
import java.util.List;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockDamageEvent;
import org.bukkit.event.block.BlockListener;
import org.bukkit.event.block.BlockPlaceEvent;
public class Jail extends BlockListener implements IConf
{
private static final Logger logger = Logger.getLogger("Minecraft");
private final EssentialsConf config;
private final IEssentials ess;
public Jail(IEssentials ess)
{
this.ess = ess;
config = new EssentialsConf(new File(ess.getDataFolder(), "jail.yml"));
config.load();
}
public void setJail(Location loc, String jailName) throws Exception
{
config.setProperty(jailName.toLowerCase(), loc);
config.save();
}
public Location getJail(String jailName) throws Exception
{
if (config.getProperty(jailName.toLowerCase()) == null)
{
throw new Exception(Util.i18n("jailNotExist"));
}
Location loc = config.getLocation(jailName.toLowerCase(), ess.getServer());
return loc;
}
public void sendToJail(User user, String jail) throws Exception
{
user.getTeleport().now(getJail(jail));
user.setJail(jail);
}
public void delJail(String jail) throws Exception
{
config.removeProperty(jail.toLowerCase());
config.save();
}
public List<String> getJails() throws Exception
{
return config.getKeys(null);
}
public void reloadConfig()
{
config.load();
}
@Override
public void onBlockBreak(BlockBreakEvent event)
{
User user = ess.getUser(event.getPlayer());
if (user.isJailed())
{
event.setCancelled(true);
}
}
@Override
public void onBlockPlace(BlockPlaceEvent event)
{
User user = ess.getUser(event.getPlayer());
if (user.isJailed())
{
event.setCancelled(true);
}
}
@Override
public void onBlockDamage(BlockDamageEvent event)
{
User user = ess.getUser(event.getPlayer());
if (user.isJailed())
{
event.setCancelled(true);
}
}
}
@@ -1,25 +0,0 @@
package com.earth2me.essentials;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerListener;
public class JailPlayerListener extends PlayerListener
{
private final IEssentials ess;
public JailPlayerListener(IEssentials parent)
{
this.ess = parent;
}
@Override
public void onPlayerInteract(PlayerInteractEvent event)
{
User user = ess.getUser(event.getPlayer());
if (user.isJailed())
{
event.setCancelled(true);
}
}
}
@@ -0,0 +1,301 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.IJails;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.storage.AsyncStorageObjectHolder;
import java.io.File;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import lombok.Cleanup;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockDamageEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.plugin.PluginManager;
public class Jails extends AsyncStorageObjectHolder<com.earth2me.essentials.settings.Jails> implements IJails
{
private static final transient Logger LOGGER = Bukkit.getLogger();
public Jails(final IEssentials ess)
{
super(ess, com.earth2me.essentials.settings.Jails.class);
onReload();
registerListeners();
}
private void registerListeners()
{
final PluginManager pluginManager = ess.getServer().getPluginManager();
final JailBlockListener blockListener = new JailBlockListener();
final JailPlayerListener playerListener = new JailPlayerListener();
pluginManager.registerEvents(blockListener, ess);
pluginManager.registerEvents(playerListener, ess);
}
@Override
public File getStorageFile()
{
return new File(ess.getDataFolder(), "jail.yml");
}
@Override
public Location getJail(final String jailName) throws Exception
{
acquireReadLock();
try
{
if (getData().getJails() == null || jailName == null
|| !getData().getJails().containsKey(jailName.toLowerCase(Locale.ENGLISH)))
{
throw new Exception(_("jailNotExist"));
}
Location loc = getData().getJails().get(jailName.toLowerCase(Locale.ENGLISH)).getBukkitLocation();
if (loc == null || loc.getWorld() == null)
{
throw new Exception(_("jailNotExist"));
}
return loc;
}
finally
{
unlock();
}
}
@Override
public Collection<String> getList() throws Exception
{
acquireReadLock();
try
{
if (getData().getJails() == null)
{
return Collections.emptyList();
}
return new ArrayList<String>(getData().getJails().keySet());
}
finally
{
unlock();
}
}
@Override
public void removeJail(final String jail) throws Exception
{
acquireWriteLock();
try
{
if (getData().getJails() == null)
{
return;
}
getData().getJails().remove(jail.toLowerCase(Locale.ENGLISH));
}
finally
{
unlock();
}
}
@Override
public void sendToJail(final IUser user, final String jail) throws Exception
{
acquireReadLock();
try
{
if (!(user.isOnline()))
{
Location loc = getJail(jail);
user.getTeleport().now(loc, false, TeleportCause.COMMAND);
}
user.acquireWriteLock();
try
{
user.getData().setJail(jail);
}
finally
{
unlock();
}
}
finally
{
unlock();
}
}
@Override
public void setJail(final String jailName, final Location loc) throws Exception
{
acquireWriteLock();
try
{
if (getData().getJails() == null)
{
getData().setJails(new HashMap<String, com.earth2me.essentials.storage.Location>());
}
getData().getJails().put(jailName.toLowerCase(Locale.ENGLISH), new com.earth2me.essentials.storage.Location(loc));
}
finally
{
unlock();
}
}
private class JailBlockListener implements Listener
{
@EventHandler(priority = EventPriority.LOW)
public void onBlockBreak(final BlockBreakEvent event)
{
@Cleanup
final IUser user = ess.getUser(event.getPlayer());
user.acquireReadLock();
if (user.getData().isJailed())
{
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOW)
public void onBlockPlace(final BlockPlaceEvent event)
{
@Cleanup
final IUser user = ess.getUser(event.getPlayer());
user.acquireReadLock();
if (user.getData().isJailed())
{
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOW)
public void onBlockDamage(final BlockDamageEvent event)
{
@Cleanup
final IUser user = ess.getUser(event.getPlayer());
user.acquireReadLock();
if (user.getData().isJailed())
{
event.setCancelled(true);
}
}
}
private class JailPlayerListener implements Listener
{
@EventHandler(priority = EventPriority.LOW)
public void onPlayerInteract(final PlayerInteractEvent event)
{
@Cleanup
final IUser user = ess.getUser(event.getPlayer());
user.acquireReadLock();
if (user.getData().isJailed())
{
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerRespawn(final PlayerRespawnEvent event)
{
@Cleanup
final IUser user = ess.getUser(event.getPlayer());
user.acquireReadLock();
if (!user.getData().isJailed() || user.getData().getJail() == null || user.getData().getJail().isEmpty())
{
return;
}
try
{
event.setRespawnLocation(getJail(user.getData().getJail()));
}
catch (Exception ex)
{
if (ess.getSettings().isDebug())
{
LOGGER.log(Level.INFO, _("returnPlayerToJailError", user.getName(), ex.getLocalizedMessage()), ex);
}
else
{
LOGGER.log(Level.INFO, _("returnPlayerToJailError", user.getName(), ex.getLocalizedMessage()));
}
}
}
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerTeleport(final PlayerTeleportEvent event)
{
@Cleanup
final IUser user = ess.getUser(event.getPlayer());
user.acquireReadLock();
if (!user.getData().isJailed() || user.getData().getJail() == null || user.getData().getJail().isEmpty())
{
return;
}
try
{
event.setTo(getJail(user.getData().getJail()));
}
catch (Exception ex)
{
if (ess.getSettings().isDebug())
{
LOGGER.log(Level.INFO, _("returnPlayerToJailError", user.getName(), ex.getLocalizedMessage()), ex);
}
else
{
LOGGER.log(Level.INFO, _("returnPlayerToJailError", user.getName(), ex.getLocalizedMessage()));
}
}
user.sendMessage(_("jailMessage"));
}
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerJoin(final PlayerJoinEvent event)
{
@Cleanup
final IUser user = ess.getUser(event.getPlayer());
user.acquireReadLock();
if (!user.getData().isJailed() || user.getData().getJail() == null || user.getData().getJail().isEmpty())
{
return;
}
try
{
sendToJail(user, user.getData().getJail());
}
catch (Exception ex)
{
if (ess.getSettings().isDebug())
{
LOGGER.log(Level.INFO, _("returnPlayerToJailError", user.getName(), ex.getLocalizedMessage()), ex);
}
else
{
LOGGER.log(Level.INFO, _("returnPlayerToJailError", user.getName(), ex.getLocalizedMessage()));
}
}
user.sendMessage(_("jailMessage"));
}
}
}
@@ -0,0 +1,90 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.IKits;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.settings.Kit;
import com.earth2me.essentials.storage.AsyncStorageObjectHolder;
import java.io.File;
import java.io.IOException;
import java.util.*;
import org.bukkit.inventory.ItemStack;
public class Kits extends AsyncStorageObjectHolder<com.earth2me.essentials.settings.Kits> implements IKits
{
public Kits(final IEssentials ess)
{
super(ess, com.earth2me.essentials.settings.Kits.class);
onReload();
}
@Override
public File getStorageFile() throws IOException
{
return new File(ess.getDataFolder(), "kits.yml");
}
@Override
public Kit getKit(String kitName) throws Exception
{
acquireReadLock();
try
{
if (getData().getKits() == null || kitName == null
|| !getData().getKits().containsKey(kitName.toLowerCase(Locale.ENGLISH)))
{
throw new Exception(_("kitError2"));
}
final Kit kit = getData().getKits().get(kitName.toLowerCase(Locale.ENGLISH));
if (kit == null)
{
throw new Exception(_("kitError2"));
}
return kit;
}
finally
{
unlock();
}
}
@Override
public void sendKit(IUser user, String kitName) throws Exception
{
final Kit kit = getKit(kitName);
sendKit(user, kit);
}
@Override
public void sendKit(IUser user, Kit kit) throws Exception
{
final List<ItemStack> itemList = kit.getItems();
user.giveItems(itemList, true);
}
@Override
public Collection<String> getList() throws Exception
{
acquireReadLock();
try
{
if (getData().getKits() == null)
{
return Collections.emptyList();
}
return new ArrayList<String>(getData().getKits().keySet());
}
finally
{
unlock();
}
}
@Override
public boolean isEmpty()
{
return getData().getKits().isEmpty();
}
}
+33 -15
View File
@@ -1,7 +1,10 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Location;
@@ -26,9 +29,17 @@ public enum Mob
SPIDER("Spider", Enemies.ENEMY, CreatureType.SPIDER),
SQUID("Squid", Enemies.FRIENDLY, CreatureType.SQUID),
ZOMBIE("Zombie", Enemies.ENEMY, CreatureType.ZOMBIE),
MONSTER("Monster", Enemies.ENEMY, CreatureType.MONSTER),
WOLF("Wolf", Enemies.NEUTRAL, CreatureType.WOLF);
WOLF("Wolf", Enemies.NEUTRAL, CreatureType.WOLF),
CAVESPIDER("CaveSpider", Enemies.ENEMY, CreatureType.CAVE_SPIDER),
ENDERMAN("Enderman", Enemies.ENEMY, "", CreatureType.ENDERMAN),
SILVERFISH("Silverfish", Enemies.ENEMY, "", CreatureType.SILVERFISH),
ENDERDRAGON("EnderDragon", Enemies.ENEMY, CreatureType.ENDER_DRAGON),
VILLAGER("Villager", Enemies.FRIENDLY, CreatureType.VILLAGER),
BLAZE("Blaze", Enemies.ENEMY, CreatureType.BLAZE),
MUSHROOMCOW("MushroomCow", Enemies.FRIENDLY, CreatureType.MUSHROOM_COW),
MAGMACUBE("MagmaCube", Enemies.ENEMY, CreatureType.MAGMA_CUBE),
SNOWMAN("Snowman", Enemies.FRIENDLY, "", CreatureType.SNOWMAN);
public static final Logger logger = Logger.getLogger("Minecraft");
private Mob(String n, Enemies en, String s, CreatureType type)
@@ -45,7 +56,6 @@ public enum Mob
this.type = en;
this.bukkitType = type;
}
public String suffix = "s";
final public String name;
final public Enemies type;
@@ -56,17 +66,20 @@ public enum Mob
{
for (Mob mob : Mob.values())
{
hashMap.put(mob.name, mob);
hashMap.put(mob.name.toLowerCase(Locale.ENGLISH), mob);
}
}
public static Set<String> getMobList() {
return hashMap.keySet();
}
public LivingEntity spawn(final Player player, final Server server, final Location loc) throws MobException
{
final LivingEntity entity = player.getWorld().spawnCreature(loc, this.bukkitType);
final LivingEntity entity = player.getWorld().spawn(loc, (Class<? extends LivingEntity>)this.bukkitType.getEntityClass());
if (entity == null)
{
logger.log(Level.WARNING, Util.i18n("unableToSpawnMob"));
logger.log(Level.WARNING, _("unableToSpawnMob"));
throw new MobException();
}
return entity;
@@ -79,21 +92,26 @@ public enum Mob
NEUTRAL("neutral"),
ENEMY("enemy");
private Enemies(final String t)
private Enemies(final String type)
{
this.type = t;
this.type = type;
}
final protected String type;
}
public CreatureType getType()
{
return bukkitType;
}
public static Mob fromName(final String name)
{
return hashMap.get(name.toLowerCase(Locale.ENGLISH));
}
public static class MobException extends Exception
{
private static final long serialVersionUID = 1L;
}
public static Mob fromName(String n)
{
return hashMap.get(n);
}
}
@@ -1,167 +0,0 @@
/**
* @author SpaceManiac
* @licent MIT
* @origin https://github.com/SpaceManiac/Nether/blob/master/org/innectis/Nether/NetherPortal.java
*/
package com.earth2me.essentials;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.Location;
import org.bukkit.Material;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
public class NetherPortal
{
private Block block;
public NetherPortal(Block b)
{
block = b;
}
public Block getBlock()
{
return block;
}
public void setBlock(Block b)
{
block = b;
}
// Return a random spawnable location
public Location getSpawn()
{
if (block.getWorld().getBlockAt(block.getX() + 1, block.getY(), block.getZ()).getType().equals(Material.PORTAL)
|| block.getWorld().getBlockAt(block.getX() - 1, block.getY(), block.getZ()).getType().equals(Material.PORTAL))
{
// portal is in X direction
return new Location(block.getWorld(), block.getX() + 1,
block.getY(), block.getZ() + 1 - 2 * Math.round(Math.random()));
}
else
{
// portal is in Z direction
return new Location(block.getWorld(), block.getX() + 1 - 2 * Math.round(Math.random()),
block.getY(), block.getZ() + 1);
}
}
// ==============================
// Find a nearby portal within 16 blocks of the given block
// Not guaranteed to be the nearest
public static NetherPortal findPortal(Block dest)
{
World world = dest.getWorld();
// Get list of columns in a circle around the block
ArrayList<Block> columns = new ArrayList<Block>();
for (int x = dest.getX() - 16; x <= dest.getX() + 16; ++x)
{
for (int z = dest.getZ() - 16; z <= dest.getZ() + 16; ++z)
{
int dx = dest.getX() - x, dz = dest.getZ() - z;
if (dx * dx + dz * dz <= 256)
{
columns.add(world.getBlockAt(x, 0, z));
}
}
}
// For each column try to find a portal block
for (Block col : columns)
{
for (int y = 127; y >= 0; --y)
{
Block b = world.getBlockAt(col.getX(), y, col.getZ());
if (b.getType().equals(Material.PORTAL) && Math.abs(dest.getY() - y) <= 16)
{
// Huzzah!
return new NetherPortal(b);
}
}
}
// Nope!
return null;
}
// Create a new portal at the specified block, fudging position if needed
// Will occasionally end up making portals in bad places, but let's hope not
public static NetherPortal createPortal(Block dest)
{
World world = dest.getWorld();
// Try not to spawn within water or lava
Material m = dest.getType();
while (((m.equals(Material.LAVA) || m.equals(Material.WATER) || m.equals(Material.STATIONARY_LAVA)
|| m.equals(Material.STATIONARY_WATER) || m.equals(Material.SAND) || m.equals(Material.GRAVEL))) &&
dest.getY() < 120)
{
dest = world.getBlockAt(dest.getX(), dest.getY() + 4, dest.getZ());
m = dest.getType();
}
// Not too high or too low overall
if (dest.getY() > 120)
{
dest = world.getBlockAt(dest.getX(), 120, dest.getZ());
}
else if (dest.getY() < 8)
{
dest = world.getBlockAt(dest.getX(), 8, dest.getZ());
}
// Create the physical portal
// For now, don't worry about direction
int x = dest.getX(), y = dest.getY(), z = dest.getZ();
Logger.getLogger("Minecraft").log(Level.INFO, Util.format("creatingPortal", x, y, z));
// Clear area around portal
ArrayList<Block> columns = new ArrayList<Block>();
for (int x2 = x - 4; x2 <= x + 4; ++x2)
{
for (int z2 = z - 4; z2 <= z + 4; ++z2)
{
double dx = x + 0.5f - x2, dz = z - z2;
if (dx * dx + dz * dz <= 13)
{
columns.add(world.getBlockAt(x2, 0, z2));
}
}
}
// Clear area around portal
for (Block col : columns)
{
// Stone platform
world.getBlockAt(col.getX(), y - 1, col.getZ()).setType(Material.STONE);
for (int yd = 0; yd < 4; ++yd)
{
world.getBlockAt(col.getX(), y + yd, col.getZ()).setType(Material.AIR);
}
}
// Build obsidian frame
for (int xd = -1; xd < 3; ++xd)
{
for (int yd = -1; yd < 4; ++yd)
{
if (xd == -1 || yd == -1 || xd == 2 || yd == 3)
{
world.getBlockAt(x + xd, y + yd, z).setType(Material.OBSIDIAN);
}
}
}
// Set it alight!
dest.setType(Material.FIRE);
return new NetherPortal(dest);
}
}
@@ -1,512 +0,0 @@
package com.earth2me.essentials;
import java.net.InetSocketAddress;
import java.util.HashSet;
import java.util.List;
import java.util.UUID;
import org.bukkit.Achievement;
import org.bukkit.Effect;
import org.bukkit.Instrument;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Note;
import org.bukkit.Server;
import org.bukkit.Statistic;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Egg;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Snowball;
import org.bukkit.entity.Vehicle;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.util.Vector;
public class OfflinePlayer implements Player
{
private final String name;
private Location location = new Location(null, 0, 0, 0, 0, 0);
private World world = null;
private UUID uniqueId = UUID.randomUUID();
public OfflinePlayer(String name)
{
this.name = name;
}
public boolean isOnline()
{
return false;
}
public boolean isOp()
{
return false;
}
public void sendMessage(String string)
{
}
public String getDisplayName()
{
return name;
}
public void setDisplayName(String string)
{
}
public void setCompassTarget(Location lctn)
{
}
public InetSocketAddress getAddress()
{
return null;
}
public void kickPlayer(String string)
{
}
public String getName()
{
return name;
}
public PlayerInventory getInventory()
{
return null;
}
public ItemStack getItemInHand()
{
return null;
}
public void setItemInHand(ItemStack is)
{
}
public int getHealth()
{
return 0;
}
public void setHealth(int i)
{
}
public Egg throwEgg()
{
return null;
}
public Snowball throwSnowball()
{
return null;
}
public Arrow shootArrow()
{
return null;
}
public boolean isInsideVehicle()
{
return false;
}
public boolean leaveVehicle()
{
return false;
}
public Vehicle getVehicle()
{
return null;
}
public Location getLocation()
{
return location;
}
public World getWorld()
{
return world;
}
public void setLocation(Location loc)
{
location = loc;
world = loc.getWorld();
}
public void teleportTo(Location lctn)
{
}
public void teleportTo(Entity entity)
{
}
public int getEntityId()
{
return -1;
}
public boolean performCommand(String string)
{
return false;
}
public boolean isPlayer()
{
return false;
}
public int getRemainingAir()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void setRemainingAir(int i)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public int getMaximumAir()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void setMaximumAir(int i)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public boolean isSneaking()
{
return false;
}
public void setSneaking(boolean bln)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void updateInventory()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void chat(String string)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public double getEyeHeight()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public double getEyeHeight(boolean bln)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public List<Block> getLineOfSight(HashSet<Byte> hs, int i)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public Block getTargetBlock(HashSet<Byte> hs, int i)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public List<Block> getLastTwoTargetBlocks(HashSet<Byte> hs, int i)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public int getFireTicks()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public int getMaxFireTicks()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void setFireTicks(int i)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void remove()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public Server getServer()
{
return Essentials.getStatic() == null ? null : Essentials.getStatic().getServer();
}
public Vector getMomentum()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void setMomentum(Vector vector)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void setVelocity(Vector vector)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public Vector getVelocity()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void damage(int i)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void damage(int i, Entity entity)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public Location getEyeLocation()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void sendRawMessage(String string) {
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public Location getCompassTarget()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public int getMaximumNoDamageTicks()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void setMaximumNoDamageTicks(int i)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public int getLastDamage()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void setLastDamage(int i)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public int getNoDamageTicks()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void setNoDamageTicks(int i)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public boolean teleport(Location lctn)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public boolean teleport(Entity entity)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public Entity getPassenger()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public boolean setPassenger(Entity entity)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public boolean isEmpty()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public boolean eject()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void saveData()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void loadData()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public boolean isSleeping()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public int getSleepTicks()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public List<Entity> getNearbyEntities(double d, double d1, double d2)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public boolean isDead()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public float getFallDistance()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void setFallDistance(float f)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void setSleepingIgnored(boolean bln)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public boolean isSleepingIgnored()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void awardAchievement(Achievement a)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void incrementStatistic(Statistic ststc)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void incrementStatistic(Statistic ststc, int i)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void incrementStatistic(Statistic ststc, Material mtrl)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void incrementStatistic(Statistic ststc, Material mtrl, int i)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void playNote(Location lctn, byte b, byte b1)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void sendBlockChange(Location lctn, Material mtrl, byte b)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void sendBlockChange(Location lctn, int i, byte b)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void setLastDamageCause(EntityDamageEvent ede)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public EntityDamageEvent getLastDamageCause()
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public void playEffect(Location lctn, Effect effect, int i)
{
throw new UnsupportedOperationException(Util.i18n("notSupportedYet"));
}
public boolean sendChunkChange(Location lctn, int i, int i1, int i2, byte[] bytes)
{
return true;
}
public UUID getUniqueId()
{
return uniqueId;
}
public void playNote(Location lctn, Instrument i, Note note)
{
throw new UnsupportedOperationException("Not supported yet.");
}
public void setPlayerTime(long l, boolean bln)
{
throw new UnsupportedOperationException("Not supported yet.");
}
public long getPlayerTime()
{
throw new UnsupportedOperationException("Not supported yet.");
}
public long getPlayerTimeOffset()
{
throw new UnsupportedOperationException("Not supported yet.");
}
public boolean isPlayerTimeRelative()
{
throw new UnsupportedOperationException("Not supported yet.");
}
public void resetPlayerTime()
{
throw new UnsupportedOperationException("Not supported yet.");
}
}
@@ -1,99 +0,0 @@
package com.earth2me.essentials;
import org.bukkit.craftbukkit.entity.CraftPlayer;
import net.minecraft.server.EntityPlayer;
import net.minecraft.server.IInventory;
import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer;
import org.bukkit.entity.Player;
public class PlayerExtension extends PlayerWrapper
{
protected final IEssentials ess;
public PlayerExtension(Player base, IEssentials ess)
{
super(base);
this.ess = ess;
}
public boolean isBanned()
{
return ess.getBans().contains(getName());
}
public boolean isIpBanned()
{
return ess.getBannedIps().contains(getAddress().getAddress().toString().replace("/", ""));
}
public float getCorrectedYaw()
{
float angle = (getLocation().getYaw() - 90.0f) % 360.0f;
if (angle < 0) {
angle += 360.0f;
}
return angle;
}
public void showInventory(IInventory inventory)
{
getHandle().a(inventory);
}
public void showInventory(CraftInventoryPlayer inventory)
{
showInventory((IInventory)inventory.getInventory());
}
public TargetBlock getTarget()
{
return new TargetBlock(getBase());
}
public String getGroup()
{
try
{
return com.nijikokun.bukkit.Permissions.Permissions.Security.getGroup(getWorld().getName(), getName());
}
catch (Throwable ex)
{
return "default";
}
}
public boolean inGroup(String group)
{
try
{
return com.nijikokun.bukkit.Permissions.Permissions.Security.inGroup(getWorld().getName(), getName(), group);
}
catch (Throwable ex)
{
return false;
}
}
public boolean canBuild()
{
try
{
return isOp() || com.nijikokun.bukkit.Permissions.Permissions.Security.canGroupBuild(getWorld().getName(), getGroup());
}
catch (Throwable ex)
{
return true;
}
}
public EntityPlayer getHandle()
{
return getCraftPlayer().getHandle();
}
public CraftPlayer getCraftPlayer()
{
return (CraftPlayer)base;
}
}
@@ -1,563 +0,0 @@
package com.earth2me.essentials;
import java.net.InetSocketAddress;
import java.util.*;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.entity.*;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.inventory.*;
import org.bukkit.util.Vector;
public class PlayerWrapper implements Player
{
protected Player base;
public PlayerWrapper(Player base)
{
this.base = base;
}
public final Player getBase()
{
return base;
}
public final Player setBase(Player base)
{
return this.base = base;
}
@Override
public void setDisplayName(String string)
{
base.setDisplayName(string);
}
@Override
public void setCompassTarget(Location lctn)
{
base.setCompassTarget(lctn);
}
@Override
public InetSocketAddress getAddress()
{
return base.getAddress();
}
@Override
public void kickPlayer(String string)
{
base.kickPlayer(string);
}
@Override
public String getName()
{
return base.getName();
}
@Override
public PlayerInventory getInventory()
{
return base.getInventory();
}
@Override
public ItemStack getItemInHand()
{
return base.getItemInHand();
}
@Override
public void setItemInHand(ItemStack is)
{
base.setItemInHand(is);
}
@Override
public int getHealth()
{
return base.getHealth();
}
@Override
public void setHealth(int i)
{
base.setHealth(i);
}
@Override
public Egg throwEgg()
{
return base.throwEgg();
}
@Override
public Snowball throwSnowball()
{
return base.throwSnowball();
}
@Override
public Arrow shootArrow()
{
return base.shootArrow();
}
@Override
public boolean isInsideVehicle()
{
return base.isInsideVehicle();
}
@Override
public boolean leaveVehicle()
{
return base.leaveVehicle();
}
@Override
public Vehicle getVehicle()
{
return base.getVehicle();
}
@Override
public Location getLocation()
{
return base.getLocation();
}
@Override
public World getWorld()
{
return base.getWorld();
}
@Override
public Server getServer()
{
return base.getServer();
}
@Override
public boolean isOnline()
{
return base.isOnline();
}
@Override
public boolean isOp()
{
return base.isOp();
}
@Override
public boolean teleport(Location lctn)
{
return base.teleport(lctn);
}
@Override
public boolean teleport(Entity entity)
{
return base.teleport(entity);
}
@Override
public void sendMessage(String string)
{
base.sendMessage(string);
}
@Override
public void setVelocity(Vector vector)
{
base.setVelocity(vector);
}
@Override
public Vector getVelocity()
{
return base.getVelocity();
}
@Override
public double getEyeHeight()
{
return base.getEyeHeight();
}
@Override
public double getEyeHeight(boolean bln)
{
return base.getEyeHeight(bln);
}
@Override
public List<Block> getLineOfSight(HashSet<Byte> hs, int i)
{
return base.getLineOfSight(hs, i);
}
@Override
public Block getTargetBlock(HashSet<Byte> hs, int i)
{
return base.getTargetBlock(hs, i);
}
@Override
public List<Block> getLastTwoTargetBlocks(HashSet<Byte> hs, int i)
{
return base.getLastTwoTargetBlocks(hs, i);
}
@Override
public int getFireTicks()
{
return base.getFireTicks();
}
@Override
public int getMaxFireTicks()
{
return base.getMaxFireTicks();
}
@Override
public void setFireTicks(int i)
{
base.setFireTicks(i);
}
@Override
public void remove()
{
base.remove();
}
/**
* This is not deprecated because the underlying method isn't really deprecated; rather, it's just "imperfect". By
* We will continue to use this method even after the underlying CraftBukkit method is changed, so do not deprecate
* it. Chances are Bukkit will also choose to un-deprecate this method at some point.
*/
@Override
public void updateInventory()
{
base.updateInventory();
}
@Override
public void chat(String string)
{
base.chat(string);
}
@Override
public boolean isSneaking()
{
return base.isSneaking();
}
@Override
public void setSneaking(boolean bln)
{
base.setSneaking(bln);
}
@Override
public int getEntityId()
{
return base.getEntityId();
}
@Override
public boolean performCommand(String string)
{
return base.performCommand(string);
}
@Override
public int getRemainingAir()
{
return base.getRemainingAir();
}
@Override
public void setRemainingAir(int i)
{
base.setRemainingAir(i);
}
@Override
public int getMaximumAir()
{
return base.getMaximumAir();
}
@Override
public void setMaximumAir(int i)
{
base.setMaximumAir(i);
}
@Override
public String getDisplayName()
{
if (base.getDisplayName() != null)
return base.getDisplayName();
else
return base.getName();
}
@Override
public void damage(int i)
{
base.damage(i);
}
@Override
public void damage(int i, Entity entity)
{
base.damage(i, entity);
}
@Override
public Location getEyeLocation()
{
return base.getEyeLocation();
}
@Override
public void sendRawMessage(String string) {
base.sendRawMessage(string);
}
@Override
public Location getCompassTarget()
{
return base.getCompassTarget();
}
@Override
public int getMaximumNoDamageTicks()
{
return base.getMaximumNoDamageTicks();
}
@Override
public void setMaximumNoDamageTicks(int i)
{
base.setMaximumNoDamageTicks(i);
}
@Override
public int getLastDamage()
{
return base.getLastDamage();
}
@Override
public void setLastDamage(int i)
{
base.setLastDamage(i);
}
@Override
public int getNoDamageTicks()
{
return base.getNoDamageTicks();
}
@Override
public void setNoDamageTicks(int i)
{
base.setNoDamageTicks(i);
}
@Override
public Entity getPassenger()
{
return base.getPassenger();
}
@Override
public boolean setPassenger(Entity entity)
{
return base.setPassenger(entity);
}
@Override
public boolean isEmpty()
{
return base.isEmpty();
}
@Override
public boolean eject()
{
return base.eject();
}
@Override
@Deprecated
public void teleportTo(Location lctn)
{
base.teleportTo(lctn);
}
@Override
@Deprecated
public void teleportTo(Entity entity)
{
base.teleportTo(entity);
}
public void saveData()
{
base.saveData();
}
public void loadData()
{
base.loadData();
}
public boolean isSleeping()
{
return base.isSleeping();
}
public int getSleepTicks()
{
return base.getSleepTicks();
}
public List<Entity> getNearbyEntities(double d, double d1, double d2)
{
return base.getNearbyEntities(d, d1, d2);
}
public boolean isDead()
{
return base.isDead();
}
public float getFallDistance()
{
return base.getFallDistance();
}
public void setFallDistance(float f)
{
base.setFallDistance(f);
}
public void setSleepingIgnored(boolean bln)
{
base.setSleepingIgnored(bln);
}
public boolean isSleepingIgnored()
{
return base.isSleepingIgnored();
}
public void awardAchievement(Achievement a)
{
base.awardAchievement(a);
}
public void incrementStatistic(Statistic ststc)
{
base.incrementStatistic(ststc);
}
public void incrementStatistic(Statistic ststc, int i)
{
base.incrementStatistic(ststc, i);
}
public void incrementStatistic(Statistic ststc, Material mtrl)
{
base.incrementStatistic(ststc, mtrl);
}
public void incrementStatistic(Statistic ststc, Material mtrl, int i)
{
base.incrementStatistic(ststc, mtrl, i);
}
public void playNote(Location lctn, byte b, byte b1)
{
base.playNote(lctn, b, b1);
}
public void sendBlockChange(Location lctn, Material mtrl, byte b)
{
base.sendBlockChange(lctn, mtrl, b);
}
public void sendBlockChange(Location lctn, int i, byte b)
{
base.sendBlockChange(lctn, i, b);
}
public void setLastDamageCause(EntityDamageEvent ede)
{
base.setLastDamageCause(ede);
}
public EntityDamageEvent getLastDamageCause()
{
return base.getLastDamageCause();
}
public void playEffect(Location lctn, Effect effect, int i)
{
base.playEffect(lctn, effect, i);
}
public boolean sendChunkChange(Location lctn, int i, int i1, int i2, byte[] bytes)
{
return base.sendChunkChange(lctn, i, i1, i2, bytes);
}
public UUID getUniqueId()
{
return base.getUniqueId();
}
public void playNote(Location lctn, Instrument i, Note note)
{
base.playNote(lctn, i, note);
}
public void setPlayerTime(long l, boolean bln)
{
base.setPlayerTime(l, bln);
}
public long getPlayerTime()
{
return base.getPlayerTime();
}
public long getPlayerTimeOffset()
{
return base.getPlayerTimeOffset();
}
public boolean isPlayerTimeRelative()
{
return base.isPlayerTimeRelative();
}
public void resetPlayerTime()
{
base.resetPlayerTime();
}
}
@@ -1,519 +0,0 @@
package com.earth2me.essentials;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.ChatColor;
import com.earth2me.essentials.commands.IEssentialsCommand;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bukkit.entity.CreatureType;
import org.bukkit.inventory.ItemStack;
public class Settings implements IConf
{
private final EssentialsConf config;
private final static Logger logger = Logger.getLogger("Minecraft");
public Settings(File dataFolder)
{
config = new EssentialsConf(new File(dataFolder, "config.yml"));
config.setTemplateName("/config.yml");
config.load();
}
public boolean getRespawnAtHome()
{
return config.getBoolean("respawn-at-home", false);
}
public boolean getBedSetsHome()
{
return config.getBoolean("bed-sethome", false);
}
public int getChatRadius()
{
return config.getInt("chat.radius", config.getInt("chat-radius", 0));
}
public double getTeleportDelay()
{
return config.getDouble("teleport-delay", 0);
}
public int getDefaultStackSize()
{
return config.getInt("default-stack-size", 64);
}
public int getStartingBalance()
{
return config.getInt("starting-balance", 0);
}
public boolean getNetherPortalsEnabled()
{
return isNetherEnabled() && config.getBoolean("nether.portals-enabled", false);
}
public boolean isCommandDisabled(final IEssentialsCommand cmd)
{
return isCommandDisabled(cmd.getName());
}
public boolean isCommandDisabled(String label)
{
for (String c : config.getStringList("disabled-commands", new ArrayList<String>(0)))
{
if (!c.equalsIgnoreCase(label)) continue;
return true;
}
return config.getBoolean("disable-" + label.toLowerCase(), false);
}
public boolean isCommandRestricted(IEssentialsCommand cmd)
{
return isCommandRestricted(cmd.getName());
}
public boolean isCommandRestricted(String label)
{
for (String c : config.getStringList("restricted-commands", new ArrayList<String>(0)))
{
if (!c.equalsIgnoreCase(label)) continue;
return true;
}
return config.getBoolean("restrict-" + label.toLowerCase(), false);
}
public boolean isCommandOverridden(String name)
{
List<String> defaultList = new ArrayList<String>(1);
defaultList.add("god");
for (String c : config.getStringList("overridden-commands", defaultList))
{
if (!c.equalsIgnoreCase(name))
continue;
return true;
}
return config.getBoolean("override-" + name.toLowerCase(), false);
}
public double getCommandCost(IEssentialsCommand cmd)
{
return getCommandCost(cmd.getName());
}
public double getCommandCost(String label)
{
double cost = config.getDouble("command-costs." + label, 0.0);
if (cost == 0.0)
cost = config.getDouble("cost-" + label, 0.0);
return cost;
}
public String getCommandPrefix()
{
return config.getString("command-prefix", "");
}
public String getNicknamePrefix()
{
return config.getString("nickname-prefix", "~");
}
public double getTeleportCooldown()
{
return config.getDouble("teleport-cooldown", 60);
}
public double getHealCooldown()
{
return config.getDouble("heal-cooldown", 60);
}
public Object getKit(String name)
{
Map<String, Object> kits = (Map<String, Object>)config.getProperty("kits");
for (Map.Entry<String, Object> entry : kits.entrySet())
{
if (entry.getKey().equalsIgnoreCase(name.replace('.', '_').replace('/', '_'))) {
return entry.getValue();
}
}
return null;
}
public Map<String, Object> getKits()
{
return (Map<String, Object>)config.getProperty("kits");
}
public ChatColor getOperatorColor() throws Exception
{
String colorName = config.getString("ops-name-color", null);
if (colorName == null)
return ChatColor.RED;
if("none".equalsIgnoreCase(colorName) || colorName.isEmpty())
throw new Exception();
try
{
return ChatColor.valueOf(colorName.toUpperCase());
}
catch (IllegalArgumentException ex)
{
}
return ChatColor.getByCode(Integer.parseInt(colorName, 16));
}
public boolean getReclaimSetting()
{
return config.getBoolean("reclaim-onlogout", true);
}
public String getNetherName()
{
return config.getString("nether.folder", "nether");
}
public boolean isNetherEnabled()
{
return config.getBoolean("nether.enabled", true);
}
public int getSpawnMobLimit()
{
return config.getInt("spawnmob-limit", 10);
}
public boolean showNonEssCommandsInHelp()
{
return config.getBoolean("non-ess-in-help", true);
}
public Map<String, Boolean> getEpSettings()
{
Map<String, Boolean> epSettings = new HashMap<String, Boolean>();
epSettings.put("protect.protect.signs", config.getBoolean("protect.protect.signs", true));
epSettings.put("protect.protect.rails", config.getBoolean("protect.protect.rails", true));
epSettings.put("protect.protect.block-below", config.getBoolean("protect.protect.block-below", true));
epSettings.put("protect.protect.prevent-block-on-rails", config.getBoolean("protect.protect.prevent-block-on-rails", false));
return epSettings;
}
public Map<String, String> getEpDBSettings()
{
Map<String, String> epSettings = new HashMap<String, String>();
epSettings.put("protect.datatype", config.getString("protect.datatype", "sqlite"));
epSettings.put("protect.username", config.getString("protect.username", "root"));
epSettings.put("protect.password", config.getString("protect.password", "root"));
epSettings.put("protect.mysqlDb", config.getString("protect.mysqlDb", "jdbc:mysql://localhost:3306/minecraft"));
return epSettings;
}
public List<Integer> getEpAlertOnPlacement()
{
final List<Integer> epAlertPlace = new ArrayList<Integer>();
for (String itemName : config.getString("protect.alert.on-placement", "").split(",")) {
itemName = itemName.trim();
if (itemName.isEmpty()) {
continue;
}
ItemStack is;
try {
is = ItemDb.get(itemName);
epAlertPlace.add(is.getTypeId());
} catch (Exception ex) {
logger.log(Level.SEVERE, Util.format("unknownItemInList", itemName, "alert.on-placement"));
}
}
return epAlertPlace;
}
public List<Integer> getEpAlertOnUse()
{
final List<Integer> epAlertUse = new ArrayList<Integer>();
for (String itemName : config.getString("protect.alert.on-use", "").split(",")) {
itemName = itemName.trim();
if (itemName.isEmpty()) {
continue;
}
ItemStack is;
try {
is = ItemDb.get(itemName);
epAlertUse.add(is.getTypeId());
} catch (Exception ex) {
logger.log(Level.SEVERE, Util.format("unknownItemInList", itemName, "alert.on-use"));
}
}
return epAlertUse;
}
public List<Integer> getEpAlertOnBreak()
{
final List<Integer> epAlertPlace = new ArrayList<Integer>();
for (String itemName : config.getString("protect.alert.on-break", "").split(",")) {
itemName = itemName.trim();
if (itemName.isEmpty()) {
continue;
}
ItemStack is;
try {
is = ItemDb.get(itemName);
epAlertPlace.add(is.getTypeId());
} catch (Exception ex) {
logger.log(Level.SEVERE, Util.format("unknownItemInList", itemName, "alert.on-break"));
}
}
return epAlertPlace;
}
public List<Integer> epBlackListPlacement()
{
final List<Integer> epBlacklistPlacement = new ArrayList<Integer>();
for (String itemName : config.getString("protect.blacklist.placement", "").split(",")) {
itemName = itemName.trim();
if (itemName.isEmpty()) {
continue;
}
ItemStack is;
try {
is = ItemDb.get(itemName);
epBlacklistPlacement.add(is.getTypeId());
} catch (Exception ex) {
logger.log(Level.SEVERE, Util.format("unknownItemInList", itemName, "blacklist.placement"));
}
}
return epBlacklistPlacement;
}
public List<Integer> epBlackListUsage()
{
final List<Integer> epBlackListUsage = new ArrayList<Integer>();
for (String itemName : config.getString("protect.blacklist.usage", "").split(",")) {
itemName = itemName.trim();
if (itemName.isEmpty()) {
continue;
}
ItemStack is;
try {
is = ItemDb.get(itemName);
epBlackListUsage.add(is.getTypeId());
} catch (Exception ex) {
logger.log(Level.SEVERE, Util.format("unknownItemInList", itemName, "blacklist.usage"));
}
}
return epBlackListUsage;
}
public Map<String, Boolean> getEpGuardSettings()
{
final Map<String, Boolean> epSettings = new HashMap<String, Boolean>();
epSettings.put("protect.prevent.lava-flow", config.getBoolean("protect.prevent.lava-flow", false));
epSettings.put("protect.prevent.water-flow", config.getBoolean("protect.prevent.water-flow", false));
epSettings.put("protect.prevent.water-bucket-flow", config.getBoolean("protect.prevent.water-bucket-flow", false));
epSettings.put("protect.prevent.fire-spread", config.getBoolean("protect.prevent.fire-spread", true));
epSettings.put("protect.prevent.flint-fire", config.getBoolean("protect.prevent.flint-fire", false));
epSettings.put("protect.prevent.portal-creation", config.getBoolean("protect.prevent.portal-creation", false));
epSettings.put("protect.prevent.lava-fire-spread", config.getBoolean("protect.prevent.lava-fire-spread", true));
epSettings.put("protect.prevent.tnt-explosion", config.getBoolean("protect.prevent.tnt-explosion", false));
epSettings.put("protect.prevent.creeper-explosion", config.getBoolean("protect.prevent.creeper-explosion", false));
epSettings.put("protect.prevent.creeper-playerdamage", config.getBoolean("protect.prevent.creeper-playerdamage", false));
epSettings.put("protect.prevent.creeper-blockdamage", config.getBoolean("protect.prevent.creeper-blockdamage", false));
epSettings.put("protect.prevent.entitytarget", config.getBoolean("protect.prevent.entitytarget", false));
for (CreatureType ct : CreatureType.values()) {
final String name = ct.toString().toLowerCase();
epSettings.put("protect.prevent.spawn."+name, config.getBoolean("protect.prevent.spawn."+name, false));
}
epSettings.put("protect.prevent.lightning-fire-spread", config.getBoolean("protect.prevent.lightning-fire-spread", true));
return epSettings;
}
public Map<String, Boolean> getEpPlayerSettings()
{
final Map<String, Boolean> epPlayerSettings = new HashMap<String, Boolean>();
epPlayerSettings.put("protect.disable.fall", config.getBoolean("protect.disable.fall", false));
epPlayerSettings.put("protect.disable.pvp", config.getBoolean("protect.disable.pvp", false));
epPlayerSettings.put("protect.disable.drown", config.getBoolean("protect.disable.drown", false));
epPlayerSettings.put("protect.disable.suffocate", config.getBoolean("protect.disable.suffocate", false));
epPlayerSettings.put("protect.disable.lavadmg", config.getBoolean("protect.disable.lavadmg", false));
epPlayerSettings.put("protect.disable.projectiles", config.getBoolean("protect.disable.projectiles", false));
epPlayerSettings.put("protect.disable.contactdmg", config.getBoolean("protect.disable.contactdmg", false));
epPlayerSettings.put("protect.disable.firedmg", config.getBoolean("protect.disable.firedmg", false));
epPlayerSettings.put("protect.disable.build", config.getBoolean("protect.disable.build", false));
epPlayerSettings.put("protect.disable.lightning", config.getBoolean("protect.disable.lightning", false));
epPlayerSettings.put("protect.disable.weather.lightning", config.getBoolean("protect.disable.weather.lightning", false));
epPlayerSettings.put("protect.disable.weather.storm", config.getBoolean("protect.disable.weather.storm", false));
epPlayerSettings.put("protect.disable.weather.thunder", config.getBoolean("protect.disable.weather.thunder", false));
return epPlayerSettings;
}
public int getEpCreeperMaxHeight()
{
return config.getInt("protect.creeper.max-height", -1);
}
public boolean areSignsDisabled()
{
return config.getBoolean("signs-disabled", false);
}
public long getBackupInterval()
{
return config.getInt("backup.interval", 1440); // 1440 = 24 * 60
}
public String getBackupCommand()
{
return config.getString("backup.command", null);
}
public String getChatFormat(String group)
{
return config.getString("chat.group-formats." + (group == null ? "Default" : group),
config.getString("chat.format", "&7[{GROUP}]&f {DISPLAYNAME}&7:&f {MESSAGE}"));
}
public boolean getGenerateExitPortals()
{
return config.getBoolean("nether.generate-exit-portals", true);
}
public boolean getAnnounceNewPlayers()
{
return !config.getString("newbies.announce-format", "-").isEmpty();
}
public String getAnnounceNewPlayerFormat(IUser user)
{
return format(config.getString("newbies.announce-format", "&dWelcome {DISPLAYNAME} to the server!"), user);
}
public String format(String format, IUser user)
{
return format.replace('&', '§').replace("§§", "&").replace("{PLAYER}", user.getDisplayName()).replace("{DISPLAYNAME}", user.getDisplayName()).replace("{GROUP}", user.getGroup()).replace("{USERNAME}", user.getName()).replace("{ADDRESS}", user.getAddress().toString());
}
public String getNewbieSpawn()
{
return config.getString("newbies.spawnpoint", "default");
}
public boolean getPerWarpPermission()
{
return config.getBoolean("per-warp-permission", false);
}
public boolean getSortListByGroups()
{
return config.getBoolean("sort-list-by-groups", true);
}
public void reloadConfig() {
config.load();
}
public ArrayList<Integer> itemSpawnBlacklist()
{
ArrayList<Integer> epItemSpwn = new ArrayList<Integer>();
for (String itemName : config.getString("item-spawn-blacklist", "").split(",")) {
itemName = itemName.trim();
if (itemName.isEmpty()) {
continue;
}
ItemStack is;
try {
is = ItemDb.get(itemName);
epItemSpwn.add(is.getTypeId());
} catch (Exception ex) {
logger.log(Level.SEVERE, Util.format("unknownItemInList", itemName, "item-spawn-blacklist"));
}
}
return epItemSpwn;
}
public ArrayList<Integer> epBlockBreakingBlacklist()
{
ArrayList<Integer> epBreakList = new ArrayList<Integer>();
for (String itemName : config.getString("protect.blacklist.break", "").split(",")) {
itemName = itemName.trim();
if (itemName.isEmpty()) {
continue;
}
ItemStack is;
try {
is = ItemDb.get(itemName);
epBreakList.add(is.getTypeId());
} catch (Exception ex) {
logger.log(Level.SEVERE, Util.format("unknownItemInList", itemName, "blacklist.break"));
}
}
return epBreakList;
}
public boolean spawnIfNoHome()
{
return config.getBoolean("spawn-if-no-home", false);
}
public boolean warnOnBuildDisallow()
{
return config.getBoolean("protect.disable.warn-on-build-disallow", false);
}
public boolean use1to1RatioInNether()
{
return config.getBoolean("nether.use-1to1-ratio", false);
}
public double getNetherRatio()
{
if (config.getBoolean("nether.use-1to1-ratio", false)) {
return 1.0;
}
return config.getDouble("nether.ratio", 16.0);
}
public boolean isDebug()
{
return config.getBoolean("debug", false);
}
public boolean warnOnSmite()
{
return config.getBoolean("warn-on-smite" ,true);
}
public boolean permissionBasedItemSpawn()
{
return config.getBoolean("permission-based-item-spawn", false);
}
public String getLocale()
{
return config.getString("locale", "");
}
public String getCurrencySymbol()
{
return config.getString("currency-symbol", "$").substring(0, 1).replaceAll("[0-9]", "$");
}
public boolean isTradeInStacks(int id)
{
return config.getBoolean("trade-in-stacks-" + id, false);
}
public boolean isEcoDisabled()
{
return config.getBoolean("disable-eco", false);
}
}
@@ -1,87 +0,0 @@
package com.earth2me.essentials;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.World.Environment;
public class Spawn implements IConf {
private static final Logger logger = Logger.getLogger("Minecraft");
private final EssentialsConf config;
private final Server server;
public Spawn(Server server, File dataFolder) {
File configFile = new File(dataFolder, "spawn.yml");
this.server = server;
config = new EssentialsConf(configFile);
config.load();
}
public void setSpawn(Location loc, String group) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("world", loc.getWorld().getName());
map.put("x", loc.getX());
map.put("y", loc.getY());
map.put("z", loc.getZ());
map.put("yaw", loc.getYaw());
map.put("pitch", loc.getPitch());
config.setProperty(group, map);
config.save();
if ("default".equals(group)) {
loc.getWorld().setSpawnLocation(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
}
}
public Location getSpawn(String group) {
if (config.getProperty(group) == null) {
group = "default";
}
if (config.getProperty(group) == null) {
for (World w : server.getWorlds()) {
if (w.getEnvironment() != Environment.NORMAL) {
continue;
}
return w.getSpawnLocation();
}
}
String worldId = config.getString(group + ".world", "");
World world = server.getWorlds().get(server.getWorlds().size() > 1 ? 1 : 0);
for (World w : server.getWorlds()) {
if (w.getEnvironment() != Environment.NORMAL) {
continue;
}
world = w;
break;
}
for (World w : server.getWorlds()) {
if (!w.getName().equals(worldId)) {
continue;
}
world = w;
break;
}
double x = config.getDouble(group + ".x", config.getDouble("default.x", 0));
double y = config.getDouble(group + ".y", config.getDouble("default.y", 0));
double z = config.getDouble(group + ".z", config.getDouble("default.z", 0));
float yaw = (float) config.getDouble(group + ".yaw", config.getDouble("default.yaw", 0));
float pitch = (float) config.getDouble(group + ".pitch", config.getDouble("default.pitch", 0));
Location retval = new Location(world, x, y, z, yaw, pitch);
if (y < 1) {
retval.setY(world.getHighestBlockYAt(retval));
}
return retval;
}
public void reloadConfig() {
config.load();
}
}
@@ -1,599 +0,0 @@
package com.earth2me.essentials;
import java.util.ArrayList;
import org.bukkit.block.Block;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
/**
* @author toi
* Thanks to Raphfrk for optimization of this class.
*/
public class TargetBlock {
private Location loc;
private double viewHeight;
private int maxDistance;
private int[] blockToIgnore;
private double checkDistance, curDistance;
private double xRotation, yRotation;
private Vector targetPos = new Vector();
private Vector targetPosDouble = new Vector();
private Vector prevPos = new Vector();
private final Vector offset = new Vector();
/**
* Constructor requiring a player, uses default values
*
* @param player Player to work with
*/
public TargetBlock(Player player)
{
this.setValues(player.getLocation(), 300, 1.65, 0.2, null);
}
/**
* Constructor requiring a location, uses default values
*
* @param loc Location to work with
*/
public TargetBlock(Location loc)
{
this.setValues(loc, 300, 0, 0.2, null);
}
/**
* Constructor requiring a player, max distance and a checking distance
*
* @param player Player to work with
* @param maxDistance How far it checks for blocks
* @param checkDistance How often to check for blocks, the smaller the more precise
*/
public TargetBlock(Player player, int maxDistance, double checkDistance)
{
this.setValues(player.getLocation(), maxDistance, 1.65, checkDistance, null);
}
/**
* Constructor requiring a location, max distance and a checking distance
*
* @param loc What location to work with
* @param maxDistance How far it checks for blocks
* @param checkDistance How often to check for blocks, the smaller the more precise
*/
public TargetBlock(Location loc, int maxDistance, double checkDistance) {
this.setValues(loc, maxDistance, 0, checkDistance, null);
}
/**
* Constructor requiring a player, max distance, checking distance and an array of blocks to ignore
*
* @param player What player to work with
* @param maxDistance How far it checks for blocks
* @param checkDistance How often to check for blocks, the smaller the more precise
* @param blocksToIgnore Integer array of what block ids to ignore while checking for viable targets
*/
public TargetBlock (Player player, int maxDistance, double checkDistance, int[] blocksToIgnore)
{
this.setValues(player.getLocation(), maxDistance, 1.65, checkDistance, blocksToIgnore);
}
/**
* Constructor requiring a location, max distance, checking distance and an array of blocks to ignore
*
* @param loc What location to work with
* @param maxDistance How far it checks for blocks
* @param checkDistance How often to check for blocks, the smaller the more precise
* @param blocksToIgnore Array of what block ids to ignore while checking for viable targets
*/
public TargetBlock (Location loc, int maxDistance, double checkDistance, int[] blocksToIgnore)
{
this.setValues(loc, maxDistance, 0, checkDistance, blocksToIgnore);
}
/**
* Constructor requiring a player, max distance, checking distance and an array of blocks to ignore
*
* @param player What player to work with
* @param maxDistance How far it checks for blocks
* @param checkDistance How often to check for blocks, the smaller the more precise
* @param blocksToIgnore String ArrayList of what block ids to ignore while checking for viable targets
*/
public TargetBlock (Player player, int maxDistance, double checkDistance, ArrayList<String> blocksToIgnore)
{
int[] bti = this.convertStringArraytoIntArray(blocksToIgnore);
this.setValues(player.getLocation(), maxDistance, 1.65, checkDistance, bti);
}
/**
* Constructor requiring a location, max distance, checking distance and an array of blocks to ignore
*
* @param loc What location to work with
* @param maxDistance How far it checks for blocks
* @param checkDistance How often to check for blocks, the smaller the more precise
* @param blocksToIgnore String ArrayList of what block ids to ignore while checking for viable targets
*/
public TargetBlock (Location loc, int maxDistance, double checkDistance, ArrayList<String> blocksToIgnore)
{
int[] bti = this.convertStringArraytoIntArray(blocksToIgnore);
this.setValues(loc, maxDistance, 0, checkDistance, bti);
}
/**
* Set the values, all constructors uses this function
*
* @param loc Location of the view
* @param maxDistance How far it checks for blocks
* @param viewPos Where the view is positioned in y-axis
* @param checkDistance How often to check for blocks, the smaller the more precise
* @param blocksToIgnore Ids of blocks to ignore while checking for viable targets
*/
private void setValues(Location loc, int maxDistance, double viewHeight, double checkDistance, int[] blocksToIgnore)
{
this.loc = loc;
this.maxDistance = maxDistance;
this.viewHeight = viewHeight;
this.checkDistance = checkDistance;
this.blockToIgnore = blocksToIgnore;
this.curDistance = 0;
xRotation = (loc.getYaw() + 90) % 360;
yRotation = loc.getPitch() * -1;
double h = (checkDistance * Math.cos(Math.toRadians(yRotation)));
offset.setY((checkDistance * Math.sin(Math.toRadians(yRotation))));
offset.setX((h * Math.cos(Math.toRadians(xRotation))));
offset.setZ((h * Math.sin(Math.toRadians(xRotation))));
targetPosDouble = new Vector(loc.getX(), loc.getY() + viewHeight, loc.getZ());
targetPos = new Vector( targetPosDouble.getBlockX(), targetPosDouble.getBlockY(), targetPosDouble.getBlockZ());
prevPos = targetPos.clone();
}
/**
* Call this to reset checking position to allow you to check for a new target with the same TargetBlock instance.
*/
public void reset()
{
targetPosDouble = new Vector(loc.getX(), loc.getY() + viewHeight, loc.getZ());
targetPos = new Vector( targetPosDouble.getBlockX(), targetPosDouble.getBlockY(), targetPosDouble.getBlockZ());
prevPos = targetPos.clone();
this.curDistance = 0;
}
/**
* Gets the distance to a block. Measures from the block underneath the player to the targetblock
* Should only be used when passing player as an constructor parameter
*
* @return double
*/
public double getDistanceToBlock()
{
Vector blockUnderPlayer = new Vector(
(int) Math.floor(loc.getX() + 0.5),
(int) Math.floor(loc.getY() - 0.5),
(int) Math.floor(loc.getZ() + 0.5));
Block blk = getTargetBlock();
double x = blk.getX() - blockUnderPlayer.getBlockX();
double y = blk.getY() - blockUnderPlayer.getBlockY();
double z = blk.getZ() - blockUnderPlayer.getBlockZ();
return Math.sqrt((Math.pow(x, 2) + Math.pow(y, 2) + Math.pow(z, 2)));
}
/**
* Gets the rounded distance to a block. Measures from the block underneath the player to the targetblock
* Should only be used when passing player as an constructor parameter
*
* @return int
*/
public int getDistanceToBlockRounded()
{
Vector blockUnderPlayer = new Vector(
(int) Math.floor(loc.getX() + 0.5),
(int) Math.floor(loc.getY() - 0.5),
(int) Math.floor(loc.getZ() + 0.5));
Block blk = getTargetBlock();
double x = blk.getX() - blockUnderPlayer.getBlockX();
double y = blk.getY() - blockUnderPlayer.getBlockY();
double z = blk.getZ() - blockUnderPlayer.getBlockZ();
return (int) Math.round((Math.sqrt((Math.pow(x, 2) + Math.pow(y, 2) + Math.pow(z, 2)))));
}
/**
* Gets the floored x distance to a block.
*
* @return int
*/
public int getXDistanceToBlock()
{
this.reset();
return (int) Math.floor(getTargetBlock().getX() - loc.getBlockX() + 0.5);
}
/**
* Gets the floored y distance to a block
*
* @return int
*/
public int getYDistanceToBlock()
{
this.reset();
return (int) Math.floor(getTargetBlock().getY() - loc.getBlockY() + viewHeight);
}
/**
* Gets the floored z distance to a block
*
* @return int
*/
public int getZDistanceToBlock()
{
this.reset();
return (int) Math.floor(getTargetBlock().getZ() - loc.getBlockZ() + 0.5);
}
/**
* Returns the block at the sight. Returns null if out of range or if no viable target was found
*
* @return Block
*/
@SuppressWarnings("empty-statement")
public Block getTargetBlock()
{
this.reset();
while ((getNextBlock() != null) && ((getCurrentBlock().getTypeId() == 0) || this.blockToIgnoreHasValue(getCurrentBlock().getTypeId())));
return getCurrentBlock();
}
/**
* Sets the type of the block at the sight. Returns false if the block wasn't set.
*
* @param typeID ID of type to set the block to
* @return boolean
*/
@SuppressWarnings("empty-statement")
public boolean setTargetBlock(int typeID)
{
if (Material.getMaterial(typeID) != null)
{
this.reset();
while (getNextBlock() != null && getCurrentBlock().getTypeId() == 0);
if (getCurrentBlock() != null)
{
Block blk = loc.getWorld().getBlockAt(targetPos.getBlockX(), targetPos.getBlockY(), targetPos.getBlockZ());
blk.setTypeId(typeID);
return true;
}
}
return false;
}
/**
* Sets the type of the block at the sight. Returns false if the block wasn't set.
*
* @param type Material to set the block to
* @return boolean
*/
@SuppressWarnings("empty-statement")
public boolean setTargetBlock(Material type)
{
this.reset();
while ((getNextBlock() != null) && ((getCurrentBlock().getTypeId() == 0) || this.blockToIgnoreHasValue(getCurrentBlock().getTypeId())));
if (getCurrentBlock() != null)
{
Block blk = loc.getWorld().getBlockAt(targetPos.getBlockX(), targetPos.getBlockY(), targetPos.getBlockZ());
blk.setType(type);
return true;
}
return false;
}
/**
* Sets the type of the block at the sight. Returns false if the block wasn't set.
* Observe! At the moment this function is using the built-in enumerator function .valueOf(String) but would preferably be changed to smarter function, when implemented
*
* @param type Name of type to set the block to
* @return boolean
*/
@SuppressWarnings("empty-statement")
public boolean setTargetBlock(String type)
{
Material mat = Material.valueOf(type);
if (mat != null)
{
this.reset();
while ((getNextBlock() != null) && ((getCurrentBlock().getTypeId() == 0) || this.blockToIgnoreHasValue(getCurrentBlock().getTypeId())));
if (getCurrentBlock() != null)
{
Block blk = loc.getWorld().getBlockAt(targetPos.getBlockX(), targetPos.getBlockY(), targetPos.getBlockZ());
blk.setType(mat);
return true;
}
}
return false;
}
/**
* Returns the block attached to the face at the sight. Returns null if out of range or if no viable target was found
*
* @return Block
*/
@SuppressWarnings("empty-statement")
public Block getFaceBlock()
{
while ((getNextBlock() != null) && ((getCurrentBlock().getTypeId() == 0) || this.blockToIgnoreHasValue(getCurrentBlock().getTypeId())));
if (getCurrentBlock() != null)
{
return getPreviousBlock();
}
else
{
return null;
}
}
/**
* Sets the type of the block attached to the face at the sight. Returns false if the block wasn't set.
*
* @param typeID
* @return boolean
*/
public boolean setFaceBlock(int typeID)
{
if (Material.getMaterial(typeID) != null)
{
if (getCurrentBlock() != null)
{
Block blk = loc.getWorld().getBlockAt(prevPos.getBlockX(), prevPos.getBlockY(), prevPos.getBlockZ());
blk.setTypeId(typeID);
return true;
}
}
return false;
}
/**
* Sets the type of the block attached to the face at the sight. Returns false if the block wasn't set.
*
* @param type
* @return boolean
*/
public boolean setFaceBlock(Material type)
{
if (getCurrentBlock() != null)
{
Block blk = loc.getWorld().getBlockAt(prevPos.getBlockX(), prevPos.getBlockY(), prevPos.getBlockZ());
blk.setType(type);
return true;
}
return false;
}
/**
* Sets the type of the block attached to the face at the sight. Returns false if the block wasn't set.
* Observe! At the moment this function is using the built-in enumerator function .valueOf(String) but would preferably be changed to smarter function, when implemented
*
* @param type
* @return boolean
*/
public boolean setFaceBlock(String type)
{
Material mat = Material.valueOf(type);
if (mat != null)
{
if (getCurrentBlock() != null)
{
Block blk = loc.getWorld().getBlockAt(prevPos.getBlockX(), prevPos.getBlockY(), prevPos.getBlockZ());
blk.setType(mat);
return true;
}
}
return false;
}
/**
* Get next block
*
* @return Block
*/
public Block getNextBlock()
{
prevPos = targetPos.clone();
do
{
curDistance += checkDistance;
targetPosDouble.setX(offset.getX() + targetPosDouble.getX());
targetPosDouble.setY(offset.getY() + targetPosDouble.getY());
targetPosDouble.setZ(offset.getZ() + targetPosDouble.getZ());
targetPos = new Vector( targetPosDouble.getBlockX(), targetPosDouble.getBlockY(), targetPosDouble.getBlockZ());
}
while (curDistance <= maxDistance && targetPos.getBlockX() == prevPos.getBlockX() && targetPos.getBlockY() == prevPos.getBlockY() && targetPos.getBlockZ() == prevPos.getBlockZ());
if (curDistance > maxDistance)
{
return null;
}
return this.loc.getWorld().getBlockAt(this.targetPos.getBlockX(), this.targetPos.getBlockY(), this.targetPos.getBlockZ());
}
/**
* Returns the current block along the line of vision
*
* @return Block
*/
public Block getCurrentBlock()
{
if (curDistance > maxDistance)
{
return null;
}
else
{
return this.loc.getWorld().getBlockAt(this.targetPos.getBlockX(), this.targetPos.getBlockY(), this.targetPos.getBlockZ());
}
}
/**
* Sets current block type. Returns false if the block wasn't set.
*
* @param typeID
*/
public boolean setCurrentBlock(int typeID)
{
if (Material.getMaterial(typeID) != null)
{
Block blk = getCurrentBlock();
if (blk != null)
{
blk.setTypeId(typeID);
return true;
}
}
return false;
}
/**
* Sets current block type. Returns false if the block wasn't set.
*
* @param type
*/
public boolean setCurrentBlock(Material type)
{
Block blk = getCurrentBlock();
if (blk != null)
{
blk.setType(type);
return true;
}
return false;
}
/**
* Sets current block type. Returns false if the block wasn't set.
* Observe! At the moment this function is using the built-in enumerator function .valueOf(String) but would preferably be changed to smarter function, when implemented
*
* @param type
*/
public boolean setCurrentBlock(String type)
{
Material mat = Material.valueOf(type);
if (mat != null)
{
Block blk = getCurrentBlock();
if (blk != null)
{
blk.setType(mat);
return true;
}
}
return false;
}
/**
* Returns the previous block in the aimed path
*
* @return Block
*/
public Block getPreviousBlock()
{
return this.loc.getWorld().getBlockAt(prevPos.getBlockX(), prevPos.getBlockY(), prevPos.getBlockZ());
}
/**
* Sets previous block type id. Returns false if the block wasn't set.
*
* @param typeID
*/
public boolean setPreviousBlock(int typeID)
{
if (Material.getMaterial(typeID) != null)
{
Block blk = getPreviousBlock();
if (blk != null)
{
blk.setTypeId(typeID);
return true;
}
}
return false;
}
/**
* Sets previous block type id. Returns false if the block wasn't set.
*
* @param type
*/
public boolean setPreviousBlock(Material type)
{
Block blk = getPreviousBlock();
if (blk != null)
{
blk.setType(type);
return true;
}
return false;
}
/**
* Sets previous block type id. Returns false if the block wasn't set.
* Observe! At the moment this function is using the built-in enumerator function .valueOf(String) but would preferably be changed to smarter function, when implemented
*
* @param type
*/
public boolean setPreviousBlock(String type)
{
Material mat = Material.valueOf(type);
if (mat != null)
{
Block blk = getPreviousBlock();
if (blk != null)
{
blk.setType(mat);
return true;
}
}
return false;
}
private int[] convertStringArraytoIntArray(ArrayList<String> array)
{
if (array != null)
{
int intarray[] = new int[array.size()];
for (int i = 0; i < array.size(); i++)
{
try
{
intarray[i] = Integer.parseInt(array.get(i));
}
catch (NumberFormatException nfe)
{
intarray[i] = 0;
}
}
return intarray;
}
return null;
}
private boolean blockToIgnoreHasValue(int value)
{
if (this.blockToIgnore != null)
{
if (this.blockToIgnore.length > 0)
{
for (int i : this.blockToIgnore)
{
if (i == value)
return true;
}
}
}
return false;
}
}
@@ -1,15 +1,28 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.ITeleport;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.commands.NotEnoughArgumentsException;
import com.earth2me.essentials.perm.Permissions;
import com.earth2me.essentials.user.CooldownException;
import com.earth2me.essentials.user.UserData.TimestampType;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
public class Teleport implements Runnable
public class Teleport implements Runnable, ITeleport
{
private static final double MOVE_CONSTANT = 0.3;
private static class Target
{
private final Location location;
@@ -48,22 +61,25 @@ public class Teleport implements Runnable
private long initY;
private long initZ;
private Target teleportTarget;
private Charge chargeFor;
private Trade chargeFor;
private final IEssentials ess;
private static final Logger logger = Logger.getLogger("Minecraft");
private TeleportCause cause;
private void initTimer(long delay, Target target, Charge chargeFor)
private void initTimer(long delay, Target target, Trade chargeFor, TeleportCause cause)
{
this.started = System.currentTimeMillis();
this.delay = delay;
this.health = user.getHealth();
this.initX = Math.round(user.getLocation().getX() * 10000);
this.initY = Math.round(user.getLocation().getY() * 10000);
this.initZ = Math.round(user.getLocation().getZ() * 10000);
this.initX = Math.round(user.getLocation().getX() * MOVE_CONSTANT);
this.initY = Math.round(user.getLocation().getY() * MOVE_CONSTANT);
this.initZ = Math.round(user.getLocation().getZ() * MOVE_CONSTANT);
this.teleportTarget = target;
this.chargeFor = chargeFor;
this.cause = cause;
}
@Override
public void run()
{
@@ -72,9 +88,9 @@ public class Teleport implements Runnable
cancel();
return;
}
if (Math.round(user.getLocation().getX() * 10000) != initX
|| Math.round(user.getLocation().getY() * 10000) != initY
|| Math.round(user.getLocation().getZ() * 10000) != initZ
if (Math.round(user.getLocation().getX() * MOVE_CONSTANT) != initX
|| Math.round(user.getLocation().getY() * MOVE_CONSTANT) != initY
|| Math.round(user.getLocation().getZ() * MOVE_CONSTANT) != initZ
|| user.getHealth() < health)
{ // user moved, cancel teleport
cancel(true);
@@ -89,11 +105,11 @@ public class Teleport implements Runnable
try
{
cooldown(false);
user.sendMessage(Util.i18n("teleportationCommencing"));
user.sendMessage(_("teleportationCommencing"));
try
{
now(teleportTarget);
now(teleportTarget, cause);
if (chargeFor != null)
{
chargeFor.charge(user);
@@ -101,17 +117,12 @@ public class Teleport implements Runnable
}
catch (Throwable ex)
{
user.sendMessage(Util.format("errorWithMessage", ex.getMessage()));
if (ess.getSettings().isDebug())
{
logger.log(Level.WARNING, ex.getMessage(), ex);
}
ess.getCommandHandler().showCommandError(user.getBase(), "teleport", ex);
}
return;
}
catch (Exception ex)
{
user.sendMessage(Util.format("cooldownWithMessage", ex.getMessage()));
user.sendMessage(_("cooldownWithMessage", ex.getMessage()));
}
}
}
@@ -122,37 +133,32 @@ public class Teleport implements Runnable
this.ess = ess;
}
public void respawn(Spawn spawn, Charge chargeFor) throws Exception
public void respawn(final Trade chargeFor, TeleportCause cause) throws Exception
{
teleport(new Target(spawn.getSpawn(user.getGroup())), chargeFor);
final Player player = user.getBase();
final Location bed = player.getBedSpawnLocation();
final PlayerRespawnEvent pre = new PlayerRespawnEvent(player, bed == null ? player.getWorld().getSpawnLocation() : bed, bed != null);
ess.getServer().getPluginManager().callEvent(pre);
teleport(new Target(pre.getRespawnLocation()), chargeFor, cause);
}
public void warp(String warp, Charge chargeFor) throws Exception
public void warp(String warp, Trade chargeFor, TeleportCause cause) throws Exception
{
Location loc = ess.getWarps().getWarp(warp);
teleport(new Target(loc), chargeFor);
user.sendMessage(Util.format("warpingTo", warp));
final Location loc = ess.getWarps().getWarp(warp);
teleport(new Target(loc), chargeFor, cause);
user.sendMessage(_("warpingTo", warp));
}
public void cooldown(boolean check) throws Exception
{
Calendar now = new GregorianCalendar();
if (user.getLastTeleportTimestamp() > 0)
try
{
double cooldown = ess.getSettings().getTeleportCooldown();
Calendar cooldownTime = new GregorianCalendar();
cooldownTime.setTimeInMillis(user.getLastTeleportTimestamp());
cooldownTime.add(Calendar.SECOND, (int)cooldown);
cooldownTime.add(Calendar.MILLISECOND, (int)((cooldown * 1000.0) % 1000.0));
if (cooldownTime.after(now) && !user.isAuthorized("essentials.teleport.cooldown.bypass"))
{
throw new Exception(Util.format("timeBeforeTeleport", Util.formatDateDiff(cooldownTime.getTimeInMillis())));
}
user.checkCooldown(TimestampType.LASTTELEPORT, ess.getGroups().getTeleportCooldown(user), !check, Permissions.TELEPORT_COOLDOWN_BYPASS);
}
// if justCheck is set, don't update lastTeleport; we're just checking
if (!check)
catch (CooldownException ex)
{
user.setLastTeleportTimestamp(now.getTimeInMillis());
throw new Exception(_("timeBeforeTeleport", ex.getMessage()));
}
}
@@ -167,7 +173,7 @@ public class Teleport implements Runnable
ess.getServer().getScheduler().cancelTask(teleTimer);
if (notifyUser)
{
user.sendMessage(Util.i18n("pendingTeleportCancelled"));
user.sendMessage(_("pendingTeleportCancelled"));
}
}
finally
@@ -181,29 +187,34 @@ public class Teleport implements Runnable
cancel(false);
}
public void teleport(Location loc, Charge chargeFor) throws Exception
public void teleport(Location loc, Trade chargeFor) throws Exception
{
teleport(new Target(loc), chargeFor);
teleport(new Target(loc), chargeFor, TeleportCause.PLUGIN);
}
public void teleport(Entity entity, Charge chargeFor) throws Exception
public void teleport(Location loc, Trade chargeFor, TeleportCause cause) throws Exception
{
teleport(new Target(entity), chargeFor);
teleport(new Target(loc), chargeFor, cause);
}
private void teleport(Target target, Charge chargeFor) throws Exception
public void teleport(Entity entity, Trade chargeFor, TeleportCause cause) throws Exception
{
double delay = ess.getSettings().getTeleportDelay();
teleport(new Target(entity), chargeFor, cause);
}
private void teleport(Target target, Trade chargeFor, TeleportCause cause) throws Exception
{
double delay = ess.getGroups().getTeleportDelay(user);
if (chargeFor != null)
{
chargeFor.isAffordableFor(user);
}
cooldown(true);
if (delay <= 0 || user.isAuthorized("essentials.teleport.timer.bypass"))
if (delay <= 0 || Permissions.TELEPORT_TIMER_BYPASS.isAuthorized(user))
{
cooldown(false);
now(target);
now(target, cause);
if (chargeFor != null)
{
chargeFor.charge(user);
@@ -215,67 +226,77 @@ public class Teleport implements Runnable
Calendar c = new GregorianCalendar();
c.add(Calendar.SECOND, (int)delay);
c.add(Calendar.MILLISECOND, (int)((delay * 1000.0) % 1000.0));
user.sendMessage(Util.format("dontMoveMessage", Util.formatDateDiff(c.getTimeInMillis())));
initTimer((long)(delay * 1000.0), target, chargeFor);
user.sendMessage(_("dontMoveMessage", Util.formatDateDiff(c.getTimeInMillis())));
initTimer((long)(delay * 1000.0), target, chargeFor, cause);
teleTimer = ess.scheduleSyncRepeatingTask(this, 10, 10);
}
private void now(Target target) throws Exception
private void now(Target target, TeleportCause cause) throws Exception
{
cancel();
user.setLastLocation();
user.getBase().teleport(Util.getSafeDestination(target.getLocation()));
user.getBase().teleport(Util.getSafeDestination(target.getLocation()), cause);
}
public void now(Location loc) throws Exception
public void now(Location loc, boolean cooldown, TeleportCause cause) throws Exception
{
cooldown(false);
now(new Target(loc));
if (cooldown)
{
cooldown(false);
}
now(new Target(loc), cause);
}
public void now(Location loc, Charge chargeFor) throws Exception
public void now(Location loc, Trade chargeFor, TeleportCause cause) throws Exception
{
cooldown(false);
chargeFor.charge(user);
now(new Target(loc));
now(new Target(loc), cause);
}
public void now(Entity entity) throws Exception
public void now(Entity entity, boolean cooldown, TeleportCause cause) throws Exception
{
cooldown(false);
now(new Target(entity));
if (cooldown)
{
cooldown(false);
}
now(new Target(entity), cause);
}
public void back(Charge chargeFor) throws Exception
public void back(Trade chargeFor) throws Exception
{
teleport(new Target(user.getLastLocation()), chargeFor);
user.acquireReadLock();
try
{
teleport(new Target(user.getData().getLastLocation().getBukkitLocation()), chargeFor, TeleportCause.COMMAND);
}
finally
{
user.unlock();
}
}
public void back() throws Exception
{
back(null);
user.acquireReadLock();
try
{
now(new Target(user.getData().getLastLocation().getBukkitLocation()), TeleportCause.COMMAND);
}
finally
{
user.unlock();
}
}
public void home(Charge chargeFor) throws Exception
public void home(IUser user, String home, Trade chargeFor) throws Exception
{
home(user, chargeFor);
}
public void home(IUser user, Charge chargeFor) throws Exception
{
Location loc = user.getHome(this.user.getLocation());
final Location loc = user.getHome(home);
if (loc == null)
{
if (ess.getSettings().spawnIfNoHome())
{
respawn(ess.getSpawn(), chargeFor);
}
else
{
throw new Exception(user == this.user ? Util.i18n("noHomeSet") : Util.i18n("noHomeSetPlayer"));
}
throw new NotEnoughArgumentsException();
}
teleport(new Target(loc), chargeFor);
teleport(new Target(loc), chargeFor, TeleportCause.COMMAND);
}
}
@@ -0,0 +1,337 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.ChargeException;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.ISettings;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.craftbukkit.InventoryWorkaround;
import com.earth2me.essentials.craftbukkit.SetExpFix;
import com.earth2me.essentials.perm.NoCommandCostPermissions;
import com.earth2me.essentials.perm.Permissions;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import lombok.Cleanup;
import org.bukkit.Location;
import org.bukkit.entity.Item;
import org.bukkit.inventory.ItemStack;
public class Trade
{
private final transient String command;
private final transient Double money;
private final transient ItemStack itemStack;
private final transient Integer exp;
private final transient IEssentials ess;
public Trade(final String command, final IEssentials ess)
{
this(command, null, null, null, ess);
}
public Trade(final double money, final IEssentials ess)
{
this(null, money, null, null, ess);
}
public Trade(final ItemStack items, final IEssentials ess)
{
this(null, null, items, null, ess);
}
public Trade(final int exp, final IEssentials ess)
{
this(null, null, null, exp, ess);
}
private Trade(final String command, final Double money, final ItemStack item, final Integer exp, final IEssentials ess)
{
this.command = command;
this.money = money;
this.itemStack = item;
this.exp = exp;
this.ess = ess;
}
public void isAffordableFor(final IUser user) throws ChargeException
{
final double mon = user.getMoney();
if (getMoney() != null
&& mon < getMoney()
&& getMoney() > 0
&& !Permissions.ECO_LOAN.isAuthorized(user))
{
throw new ChargeException(_("notEnoughMoney"));
}
if (getItemStack() != null
&& !InventoryWorkaround.containsItem(user.getInventory(), true, true, itemStack))
{
throw new ChargeException(_("missingItems", getItemStack().getAmount(), getItemStack().getType().toString().toLowerCase(Locale.ENGLISH).replace("_", " ")));
}
@Cleanup
final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (command != null && !command.isEmpty()
&& !NoCommandCostPermissions.getPermission(command).isAuthorized(user)
&& mon < settings.getData().getEconomy().getCommandCost(command.charAt(0) == '/' ? command.substring(1) : command)
&& 0 < settings.getData().getEconomy().getCommandCost(command.charAt(0) == '/' ? command.substring(1) : command)
&& !Permissions.ECO_LOAN.isAuthorized(user))
{
throw new ChargeException(_("notEnoughMoney"));
}
if (exp != null && exp > 0
&& SetExpFix.getTotalExperience(user) < exp)
{
throw new ChargeException(_("notEnoughExperience"));
}
}
public void pay(final IUser user)
{
pay(user, true);
}
public boolean pay(final IUser user, final boolean dropItems)
{
boolean success = true;
if (getMoney() != null && getMoney() > 0)
{
user.giveMoney(getMoney());
}
if (getItemStack() != null)
{
if (dropItems)
{
final Map<Integer, ItemStack> leftOver = InventoryWorkaround.addItem(user.getInventory(), true, getItemStack());
final Location loc = user.getLocation();
for (ItemStack dropStack : leftOver.values())
{
final int maxStackSize = dropStack.getType().getMaxStackSize();
final int stacks = dropStack.getAmount() / maxStackSize;
final int leftover = dropStack.getAmount() % maxStackSize;
final Item[] itemStacks = new Item[stacks + (leftover > 0 ? 1 : 0)];
for (int i = 0; i < stacks; i++)
{
final ItemStack stack = dropStack.clone();
stack.setAmount(maxStackSize);
itemStacks[i] = loc.getWorld().dropItem(loc, stack);
}
if (leftover > 0)
{
final ItemStack stack = dropStack.clone();
stack.setAmount(leftover);
itemStacks[stacks] = loc.getWorld().dropItem(loc, stack);
}
}
}
else
{
success = InventoryWorkaround.addAllItems(user.getInventory(), true, getItemStack());
}
user.updateInventory();
}
if (getExperience() != null)
{
SetExpFix.setTotalExperience(user, SetExpFix.getTotalExperience(user) + getExperience());
}
return success;
}
public void charge(final IUser user) throws ChargeException
{
if (getMoney() != null)
{
final double mon = user.getMoney();
if (mon < getMoney() && getMoney() > 0 && !Permissions.ECO_LOAN.isAuthorized(user))
{
throw new ChargeException(_("notEnoughMoney"));
}
user.takeMoney(getMoney());
}
if (getItemStack() != null)
{
if (!InventoryWorkaround.containsItem(user.getInventory(), true, true, itemStack))
{
throw new ChargeException(_("missingItems", getItemStack().getAmount(), getItemStack().getType().toString().toLowerCase(Locale.ENGLISH).replace("_", " ")));
}
InventoryWorkaround.removeItem(user.getInventory(), true, true, getItemStack());
user.updateInventory();
}
if (command != null && !command.isEmpty()
&& !NoCommandCostPermissions.getPermission(command).isAuthorized(user))
{
@Cleanup
final ISettings settings = ess.getSettings();
settings.acquireReadLock();
final double mon = user.getMoney();
final double cost = settings.getData().getEconomy().getCommandCost(command.charAt(0) == '/' ? command.substring(1) : command);
if (mon < cost && cost > 0 && !Permissions.ECO_LOAN.isAuthorized(user))
{
throw new ChargeException(_("notEnoughMoney"));
}
user.takeMoney(cost);
}
if (getExperience() != null)
{
final int experience = SetExpFix.getTotalExperience(user);
if (experience < getExperience() && getExperience() > 0)
{
throw new ChargeException(_("notEnoughExperience"));
}
SetExpFix.setTotalExperience(user, experience - getExperience());
}
}
public Double getMoney()
{
return money;
}
public ItemStack getItemStack()
{
return itemStack;
}
public Integer getExperience()
{
return exp;
}
private static FileWriter fw = null;
public static void log(String type, String subtype, String event, String sender, Trade charge, String receiver, Trade pay, Location loc, IEssentials ess)
{
@Cleanup
final ISettings settings = ess.getSettings();
settings.acquireReadLock();
if (!settings.getData().getEconomy().isLogEnabled())
{
return;
}
if (fw == null)
{
try
{
fw = new FileWriter(new File(ess.getDataFolder(), "trade.log"), true);
}
catch (IOException ex)
{
Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex);
}
}
StringBuilder sb = new StringBuilder();
sb.append(type).append(",").append(subtype).append(",").append(event).append(",\"");
sb.append(DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL).format(new Date()));
sb.append("\",\"");
if (sender != null)
{
sb.append(sender);
}
sb.append("\",");
if (charge == null)
{
sb.append("\"\",\"\",\"\"");
}
else
{
if (charge.getItemStack() != null)
{
sb.append(charge.getItemStack().getAmount()).append(",");
sb.append(charge.getItemStack().getType().toString()).append(",");
sb.append(charge.getItemStack().getDurability());
}
if (charge.getMoney() != null)
{
sb.append(charge.getMoney()).append(",");
sb.append("money").append(",");
sb.append(settings.getData().getEconomy().getCurrencySymbol());
}
if (charge.getExperience() != null)
{
sb.append(charge.getExperience()).append(",");
sb.append("exp").append(",");
sb.append("\"\"");
}
}
sb.append(",\"");
if (receiver != null)
{
sb.append(receiver);
}
sb.append("\",");
if (pay == null)
{
sb.append("\"\",\"\",\"\"");
}
else
{
if (pay.getItemStack() != null)
{
sb.append(pay.getItemStack().getAmount()).append(",");
sb.append(pay.getItemStack().getType().toString()).append(",");
sb.append(pay.getItemStack().getDurability());
}
if (pay.getMoney() != null)
{
sb.append(pay.getMoney()).append(",");
sb.append("money").append(",");
sb.append(settings.getData().getEconomy().getCurrencySymbol());
}
if (pay.getExperience() != null)
{
sb.append(pay.getExperience()).append(",");
sb.append("exp").append(",");
sb.append("\"\"");
}
}
if (loc == null)
{
sb.append(",\"\",\"\",\"\",\"\"");
}
else
{
sb.append(",\"");
sb.append(loc.getWorld().getName()).append("\",");
sb.append(loc.getBlockX()).append(",");
sb.append(loc.getBlockY()).append(",");
sb.append(loc.getBlockZ()).append(",");
}
sb.append("\n");
try
{
fw.write(sb.toString());
fw.flush();
}
catch (IOException ex)
{
Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex);
}
}
public static void closeLog()
{
if (fw != null)
{
try
{
fw.close();
}
catch (IOException ex)
{
Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex);
}
fw = null;
}
}
}
@@ -1,289 +0,0 @@
package com.earth2me.essentials;
import com.earth2me.essentials.commands.IEssentialsCommand;
import com.earth2me.essentials.register.payment.Method;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.logging.Logger;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class User extends UserData implements Comparable<User>, IReplyTo, IUser
{
private static final Logger logger = Logger.getLogger("Minecraft");
private boolean justPortaled = false;
private CommandSender replyTo = null;
private User teleportRequester;
private boolean teleportRequestHere;
private final Teleport teleport;
private long lastActivity;
User(Player base, IEssentials ess)
{
super(base, ess);
teleport = new Teleport(this, ess);
}
User update(Player base)
{
setBase(base);
return this;
}
public boolean isAuthorized(IEssentialsCommand cmd)
{
return isAuthorized("essentials." + (cmd.getName().equals("r") ? "msg" : cmd.getName()));
}
public boolean isAuthorized(String node)
{
if (isOp())
{
return true;
}
if (isJailed())
{
return false;
}
try
{
return com.nijikokun.bukkit.Permissions.Permissions.Security.permission(base, node);
}
catch (Throwable ex)
{
String[] cmds = node.split("\\.", 2);
return !ess.getSettings().isCommandRestricted(cmds[cmds.length - 1]);
}
}
public void healCooldown() throws Exception
{
Calendar now = new GregorianCalendar();
if (getLastHealTimestamp() > 0)
{
double cooldown = ess.getSettings().getHealCooldown();
Calendar cooldownTime = new GregorianCalendar();
cooldownTime.setTimeInMillis(getLastHealTimestamp());
cooldownTime.add(Calendar.SECOND, (int)cooldown);
cooldownTime.add(Calendar.MILLISECOND, (int)((cooldown * 1000.0) % 1000.0));
if (cooldownTime.after(now) && !isAuthorized("essentials.heal.cooldown.bypass"))
{
throw new Exception(Util.format("timeBeforeHeal", Util.formatDateDiff(cooldownTime.getTimeInMillis())));
}
}
setLastHealTimestamp(now.getTimeInMillis());
}
public void giveMoney(double value)
{
if (value == 0)
{
return;
}
setMoney(getMoney() + value);
sendMessage(Util.format("addedToAccount", Util.formatCurrency(value)));
}
public void payUser(User reciever, double value) throws Exception
{
if (value == 0)
{
return;
}
if (!canAfford(value))
{
throw new Exception(Util.i18n("notEnoughMoney"));
}
else
{
setMoney(getMoney() - value);
reciever.setMoney(reciever.getMoney() + value);
sendMessage(Util.format("moneySentTo", Util.formatCurrency(value), reciever.getDisplayName()));
reciever.sendMessage(Util.format("moneyRecievedFrom", Util.formatCurrency(value), getDisplayName()));
}
}
public void takeMoney(double value)
{
if (value == 0)
{
return;
}
setMoney(getMoney() - value);
sendMessage(Util.format("takenFromAccount", Util.formatCurrency(value)));
}
public boolean canAfford(double cost)
{
double mon = getMoney();
return mon >= cost || isAuthorized("essentials.eco.loan");
}
public void dispose()
{
this.base = new OfflinePlayer(getName());
}
public boolean getJustPortaled()
{
return justPortaled;
}
public void setJustPortaled(boolean value)
{
justPortaled = value;
}
public void setReplyTo(CommandSender user)
{
replyTo = user;
}
public CommandSender getReplyTo()
{
return replyTo;
}
public int compareTo(User t)
{
return ChatColor.stripColor(this.getDisplayName()).compareToIgnoreCase(ChatColor.stripColor(t.getDisplayName()));
}
@Override
public boolean equals(Object o)
{
if (!(o instanceof User))
{
return false;
}
return ChatColor.stripColor(this.getDisplayName()).equalsIgnoreCase(ChatColor.stripColor(((User) o).getDisplayName()));
}
@Override
public int hashCode()
{
return ChatColor.stripColor(this.getDisplayName()).hashCode();
}
public Boolean canSpawnItem(int itemId)
{
return !ess.getSettings().itemSpawnBlacklist().contains(itemId);
}
public void setHome()
{
setHome(getLocation(), true);
}
public void setHome(boolean defaultHome)
{
setHome(getLocation(), defaultHome);
}
public void setLastLocation()
{
setLastLocation(getLocation());
}
public void requestTeleport(User player, boolean here)
{
teleportRequester = player;
teleportRequestHere = here;
}
public User getTeleportRequest()
{
return teleportRequester;
}
public boolean isTeleportRequestHere()
{
return teleportRequestHere;
}
public String getNick()
{
String nickname = getNickname();
if (ess.getSettings().isCommandDisabled("nick") || nickname == null || nickname.isEmpty() || nickname.equals(getName()))
{
nickname = getName();
}
else
{
nickname = ess.getSettings().getNicknamePrefix() + nickname;
}
if (isOp())
{
try
{
nickname = ess.getSettings().getOperatorColor().toString() + nickname + "§f";
}
catch(Exception e)
{
}
}
return nickname;
}
public Teleport getTeleport()
{
return teleport;
}
public long getLastActivity()
{
return lastActivity;
}
public void setLastActivity(long timestamp)
{
lastActivity = timestamp;
}
@Override
public double getMoney()
{
if (ess.isRegisterFallbackEnabled() && ess.getPaymentMethod().hasMethod())
{
try
{
Method method = ess.getPaymentMethod().getMethod();
if (!method.hasAccount(this.getName())) {
throw new Exception();
}
Method.MethodAccount account = ess.getPaymentMethod().getMethod().getAccount(this.getName());
return account.balance();
}
catch (Throwable ex)
{
}
}
return super.getMoney();
}
@Override
public void setMoney(double value)
{
if (ess.isRegisterFallbackEnabled() && ess.getPaymentMethod().hasMethod())
{
try
{
Method method = ess.getPaymentMethod().getMethod();
if (!method.hasAccount(this.getName())) {
throw new Exception();
}
Method.MethodAccount account = ess.getPaymentMethod().getMethod().getAccount(this.getName());
account.set(value);
}
catch (Throwable ex)
{
}
}
super.setMoney(value);
}
}
@@ -1,709 +0,0 @@
package com.earth2me.essentials;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public abstract class UserData extends PlayerExtension implements IConf
{
private final EssentialsConf config;
private static final Logger logger = Logger.getLogger("Minecraft");
protected UserData(Player base, IEssentials ess)
{
super(base, ess);
File folder = new File(ess.getDataFolder(), "userdata");
if (!folder.exists())
{
folder.mkdirs();
}
config = new EssentialsConf(new File(folder, Util.sanitizeFileName(base.getName()) + ".yml"));
reloadConfig();
}
public final void reloadConfig()
{
config.load();
money = _getMoney();
unlimited = _getUnlimited();
powertools = getPowertools();
lastLocation = _getLastLocation();
lastTeleportTimestamp = _getLastTeleportTimestamp();
lastHealTimestamp = _getLastHealTimestamp();
jail = _getJail();
mails = _getMails();
savedInventory = _getSavedInventory();
teleportEnabled = getTeleportEnabled();
ignoredPlayers = getIgnoredPlayers();
godmode = getGodModeEnabled();
muted = getMuted();
muteTimeout = _getMuteTimeout();
jailed = getJailed();
jailTimeout = _getJailTimeout();
lastLogin = _getLastLogin();
lastLogout = _getLastLogout();
afk = getAfk();
newplayer = getNew();
geolocation = _getGeoLocation();
isSocialSpyEnabled = _isSocialSpyEnabled();
isNPC = _isNPC();
}
private double money;
private double _getMoney() {
if (config.hasProperty("money"))
{
return config.getDouble("money", ess.getSettings().getStartingBalance());
}
else
{
return ess.getSettings().getStartingBalance();
}
}
public double getMoney()
{
return money;
}
public void setMoney(double value)
{
money = value;
config.setProperty("money", value);
config.save();
}
public boolean hasHome()
{
if (config.hasProperty("home"))
{
return true;
}
return false;
}
public Location getHome(Location location)
{
if (!hasHome())
{
return null;
}
World world = location.getWorld();
String worldHome = "home.worlds." + world.getName().toLowerCase();
if (!config.hasProperty(worldHome))
{
String defaultWorld = config.getString("home.default");
worldHome = "home.worlds." + defaultWorld;
}
Location loc = config.getLocation(worldHome, getServer());
return loc;
}
public void setHome(Location loc, boolean b)
{
String worldName = loc.getWorld().getName().toLowerCase();
if (worldName == null || worldName.isEmpty())
{
logger.log(Level.WARNING, Util.i18n("emptyWorldName"));
return;
}
if (b || !config.hasProperty("home.default"))
{
config.setProperty("home.default", worldName);
}
config.setProperty("home.worlds." + worldName, loc);
config.save();
}
public String getNickname()
{
return config.getString("nickname");
}
public void setNickname(String nick)
{
config.setProperty("nickname", nick);
config.save();
}
private List<Integer> unlimited;
private List<Integer> _getUnlimited()
{
return config.getIntList("unlimited", new ArrayList<Integer>());
}
public List<Integer> getUnlimited()
{
return unlimited;
}
public boolean hasUnlimited(ItemStack stack)
{
return unlimited.contains(stack.getTypeId());
}
public void setUnlimited(ItemStack stack, boolean state)
{
if (unlimited.contains(stack.getTypeId()))
{
unlimited.remove(Integer.valueOf(stack.getTypeId()));
}
if (state)
{
unlimited.add(stack.getTypeId());
}
config.setProperty("unlimited", unlimited);
config.save();
}
private Map<Integer, String> powertools;
@SuppressWarnings("unchecked")
private Map<Integer, String> getPowertools()
{
Object o = config.getProperty("powertools");
if (o instanceof Map)
{
return (Map<Integer, String>)o;
}
else
{
return new HashMap<Integer, String>();
}
}
public String getPowertool(ItemStack stack)
{
return powertools.get(stack.getTypeId());
}
public void setPowertool(ItemStack stack, String command)
{
if (command == null || command.isEmpty())
{
powertools.remove(stack.getTypeId());
}
else
{
powertools.put(stack.getTypeId(), command);
}
config.setProperty("powertools", powertools);
config.save();
}
private Location lastLocation;
private Location _getLastLocation()
{
return config.getLocation("lastlocation", getServer());
}
public Location getLastLocation()
{
return lastLocation;
}
public void setLastLocation(Location loc)
{
lastLocation = loc;
config.setProperty("lastlocation", loc);
config.save();
}
private long lastTeleportTimestamp;
private long _getLastTeleportTimestamp()
{
return config.getLong("timestamps.lastteleport", 0);
}
public long getLastTeleportTimestamp()
{
return lastTeleportTimestamp;
}
public void setLastTeleportTimestamp(long time)
{
lastTeleportTimestamp = time;
config.setProperty("timestamps.lastteleport", time);
config.save();
}
private long lastHealTimestamp;
private long _getLastHealTimestamp()
{
return config.getLong("timestamps.lastheal", 0);
}
public long getLastHealTimestamp()
{
return lastHealTimestamp;
}
public void setLastHealTimestamp(long time)
{
lastHealTimestamp = time;
config.setProperty("timestamps.lastheal", time);
config.save();
}
private String jail;
private String _getJail()
{
return config.getString("jail");
}
public String getJail()
{
return jail;
}
public void setJail(String jail)
{
if (jail == null || jail.isEmpty())
{
this.jail = null;
config.removeProperty("jail");
}
else
{
this.jail = jail;
config.setProperty("jail", jail);
}
config.save();
}
private List<String> mails;
private List<String> _getMails()
{
return config.getStringList("mail", new ArrayList<String>());
}
public List<String> getMails()
{
return mails;
}
public void setMails(List<String> mails)
{
if (mails == null)
{
config.removeProperty("mail");
mails = _getMails();
}
else
{
config.setProperty("mail", mails);
}
this.mails = mails;
config.save();
}
public void addMail(String mail)
{
mails.add(mail);
setMails(mails);
}
private ItemStack[] savedInventory;
public ItemStack[] getSavedInventory()
{
return savedInventory;
}
private ItemStack[] _getSavedInventory()
{
int size = config.getInt("inventory.size", 0);
if (size < 1 || (getInventory() != null && size > getInventory().getSize()))
{
return null;
}
ItemStack[] is = new ItemStack[size];
for (int i = 0; i < size; i++)
{
is[i] = config.getItemStack("inventory." + i);
}
return is;
}
public void setSavedInventory(ItemStack[] is)
{
if (is == null || is.length == 0)
{
savedInventory = null;
config.removeProperty("inventory");
}
else
{
savedInventory = is;
config.setProperty("inventory.size", is.length);
for (int i = 0; i < is.length; i++)
{
if (is[i] == null || is[i].getType() == Material.AIR)
{
continue;
}
config.setProperty("inventory." + i, is[i]);
}
}
config.save();
}
private boolean teleportEnabled;
private boolean getTeleportEnabled()
{
return config.getBoolean("teleportenabled", true);
}
public boolean isTeleportEnabled()
{
return teleportEnabled;
}
public void setTeleportEnabled(boolean set)
{
teleportEnabled = set;
config.setProperty("teleportenabled", set);
config.save();
}
public boolean toggleTeleportEnabled()
{
boolean ret = !isTeleportEnabled();
setTeleportEnabled(ret);
return ret;
}
public boolean toggleSocialSpy()
{
boolean ret = !isSocialSpyEnabled();
setSocialSpyEnabled(ret);
return ret;
}
private List<String> ignoredPlayers;
public List<String> getIgnoredPlayers()
{
return config.getStringList("ignore", new ArrayList<String>());
}
public void setIgnoredPlayers(List<String> players)
{
if (players == null || players.isEmpty())
{
ignoredPlayers = new ArrayList<String>();
config.removeProperty("ignore");
}
else
{
ignoredPlayers = players;
config.setProperty("ignore", players);
}
config.save();
}
public boolean isIgnoredPlayer(String name)
{
return ignoredPlayers.contains(name.toLowerCase());
}
public void setIgnoredPlayer(String name, boolean set)
{
if (set)
{
ignoredPlayers.add(name.toLowerCase());
}
else
{
ignoredPlayers.remove(name.toLowerCase());
}
setIgnoredPlayers(ignoredPlayers);
}
private boolean godmode;
private boolean getGodModeEnabled()
{
return config.getBoolean("godmode", false);
}
public boolean isGodModeEnabled()
{
return godmode;
}
public void setGodModeEnabled(boolean set)
{
godmode = set;
config.setProperty("godmode", set);
config.save();
}
public boolean toggleGodModeEnabled()
{
boolean ret = !isGodModeEnabled();
setGodModeEnabled(ret);
return ret;
}
private boolean muted;
private boolean getMuted()
{
return config.getBoolean("muted", false);
}
public boolean isMuted()
{
return muted;
}
public void setMuted(boolean set)
{
muted = set;
config.setProperty("muted", set);
config.save();
}
public boolean toggleMuted()
{
boolean ret = !isMuted();
setMuted(ret);
return ret;
}
private long muteTimeout;
private long _getMuteTimeout()
{
return config.getLong("timestamps.mute", 0);
}
public long getMuteTimeout()
{
return muteTimeout;
}
public void setMuteTimeout(long time)
{
muteTimeout = time;
config.setProperty("timestamps.mute", time);
config.save();
}
private boolean jailed;
private boolean getJailed()
{
return config.getBoolean("jailed", false);
}
public boolean isJailed()
{
return jailed;
}
public void setJailed(boolean set)
{
jailed = set;
config.setProperty("jailed", set);
config.save();
}
public boolean toggleJailed()
{
boolean ret = !isJailed();
setJailed(ret);
return ret;
}
private long jailTimeout;
private long _getJailTimeout()
{
return config.getLong("timestamps.jail", 0);
}
public long getJailTimeout()
{
return jailTimeout;
}
public void setJailTimeout(long time)
{
jailTimeout = time;
config.setProperty("timestamps.jail", time);
config.save();
}
public String getBanReason()
{
return config.getString("ban.reason");
}
public void setBanReason(String reason)
{
config.setProperty("ban.reason", reason);
config.save();
}
public long getBanTimeout()
{
return config.getLong("ban.timeout", 0);
}
public void setBanTimeout(long time)
{
config.setProperty("ban.timeout", time);
config.save();
}
private long lastLogin;
private long _getLastLogin()
{
return config.getLong("timestamps.login", 0);
}
public long getLastLogin()
{
return lastLogin;
}
public void setLastLogin(long time)
{
lastLogin = time;
config.setProperty("timestamps.login", time);
config.save();
}
private long lastLogout;
private long _getLastLogout()
{
return config.getLong("timestamps.logout", 0);
}
public long getLastLogout()
{
return lastLogout;
}
public void setLastLogout(long time)
{
lastLogout = time;
config.setProperty("timestamps.logout", time);
config.save();
}
private boolean afk;
private boolean getAfk()
{
return config.getBoolean("afk", false);
}
public boolean isAfk()
{
return afk;
}
public void setAfk(boolean set)
{
afk = set;
config.setProperty("afk", set);
config.save();
}
public boolean toggleAfk()
{
boolean ret = !isAfk();
setAfk(ret);
return ret;
}
private boolean newplayer;
private boolean getNew()
{
return config.getBoolean("newplayer", true);
}
public boolean isNew()
{
return newplayer;
}
public void setNew(boolean set)
{
newplayer = set;
config.setProperty("newplayer", set);
config.save();
}
private String geolocation;
private String _getGeoLocation()
{
return config.getString("geolocation");
}
public String getGeoLocation()
{
return geolocation;
}
public void setGeoLocation(String geolocation)
{
if (geolocation == null || geolocation.isEmpty())
{
this.geolocation = null;
config.removeProperty("geolocation");
}
else
{
this.geolocation = geolocation;
config.setProperty("geolocation", geolocation);
}
config.save();
}
private boolean isSocialSpyEnabled;
private boolean _isSocialSpyEnabled()
{
return config.getBoolean("socialspy", false);
}
public boolean isSocialSpyEnabled()
{
return isSocialSpyEnabled;
}
public void setSocialSpyEnabled(boolean status)
{
isSocialSpyEnabled = status;
config.setProperty("socialspy", status);
config.save();
}
private boolean isNPC;
private boolean _isNPC()
{
return config.getBoolean("npc", false);
}
public boolean isNPC()
{
return isNPC;
}
public void setNPC(boolean set)
{
isNPC = set;
config.setProperty("npc", set);
config.save();
}
}
+384 -184
View File
@@ -1,42 +1,95 @@
package com.earth2me.essentials;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.ISettings;
import com.earth2me.essentials.api.InvalidNameException;
import com.earth2me.essentials.external.gnu.inet.encoding.Punycode;
import com.earth2me.essentials.external.gnu.inet.encoding.PunycodeException;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.MessageFormat;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.*;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import lombok.Cleanup;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.LivingEntity;
import org.bukkit.inventory.ItemStack;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.PluginManager;
public class Util
public final class Util
{
private Util()
{
}
private final static Logger logger = Logger.getLogger("Minecraft");
private final static Pattern INVALIDFILECHARS = Pattern.compile("[^\u0020-\u007E\u0085\u00A0-\uD7FF\uE000-\uFFFC]");
private final static Pattern INVALIDCHARS = Pattern.compile("[^\t\n\r\u0020-\u007E\u0085\u00A0-\uD7FF\uE000-\uFFFC]");
public static String sanitizeFileName(String name)
public static String sanitizeFileName(String name) throws InvalidNameException
{
return name.toLowerCase().replaceAll("[^a-z0-9]", "_");
try
{
String r = name.toLowerCase(Locale.ENGLISH);
r = r.replace('.', (char)('\ue200' + '.'));
r = r.replace('\\', (char)('\ue200' + '\\'));
r = r.replace('/', (char)('\ue200' + '/'));
r = r.replace('"', (char)('\ue200' + '"'));
r = r.replace('<', (char)('\ue200' + '<'));
r = r.replace('>', (char)('\ue200' + '>'));
r = r.replace('|', (char)('\ue200' + '|'));
r = r.replace('?', (char)('\ue200' + '?'));
r = r.replace('*', (char)('\ue200' + '*'));
r = r.replace(':', (char)('\ue200' + ':'));
r = r.replace('-', (char)('\ue200' + '-'));
r = INVALIDFILECHARS.matcher(r).replaceAll("");
return Punycode.encode(r);
}
catch (PunycodeException ex)
{
throw new InvalidNameException(ex);
}
}
public static String decodeFileName(String name) throws InvalidNameException
{
try
{
String r = Punycode.decode(name);
r = r.replace((char)('\ue200' + '.'), '.');
r = r.replace((char)('\ue200' + '\\'), '\\');
r = r.replace((char)('\ue200' + '/'), '/');
r = r.replace((char)('\ue200' + '"'), '"');
r = r.replace((char)('\ue200' + '<'), '<');
r = r.replace((char)('\ue200' + '>'), '>');
r = r.replace((char)('\ue200' + '|'), '|');
r = r.replace((char)('\ue200' + '?'), '?');
r = r.replace((char)('\ue200' + '*'), '*');
r = r.replace((char)('\ue200' + ':'), ':');
r = r.replace((char)('\ue200' + '-'), '-');
return r;
}
catch (PunycodeException ex)
{
throw new InvalidNameException(ex);
}
}
public static String sanitizeKey(String name)
{
return INVALIDCHARS.matcher(name.toLowerCase(Locale.ENGLISH)).replaceAll("_");
}
public static String sanitizeString(final String string)
{
return INVALIDCHARS.matcher(string).replaceAll("");
}
public static String formatDateDiff(long date)
@@ -52,7 +105,7 @@ public class Util
boolean future = false;
if (toDate.equals(fromDate))
{
return Util.i18n("now");
return _("now");
}
if (toDate.after(fromDate))
{
@@ -71,18 +124,18 @@ public class Util
};
String[] names = new String[]
{
Util.i18n("year"),
Util.i18n("years"),
Util.i18n("month"),
Util.i18n("months"),
Util.i18n("day"),
Util.i18n("days"),
Util.i18n("hour"),
Util.i18n("hours"),
Util.i18n("minute"),
Util.i18n("minutes"),
Util.i18n("second"),
Util.i18n("seconds")
_("year"),
_("years"),
_("month"),
_("months"),
_("day"),
_("days"),
_("hour"),
_("hours"),
_("minute"),
_("minutes"),
_("second"),
_("seconds")
};
for (int i = 0; i < types.length; i++)
{
@@ -182,7 +235,7 @@ public class Util
}
if (!found)
{
throw new Exception(Util.i18n("illegalDate"));
throw new Exception(_("illegalDate"));
}
Calendar c = new GregorianCalendar();
if (years > 0)
@@ -215,56 +268,118 @@ public class Util
}
return c.getTimeInMillis();
}
// The player can stand inside these materials
private static final Set<Integer> AIR_MATERIALS = new HashSet<Integer>();
private static final HashSet<Byte> AIR_MATERIALS_TARGET = new HashSet<Byte>();
public static Location getSafeDestination(Location loc) throws Exception
static
{
if (loc == null)
AIR_MATERIALS.add(Material.AIR.getId());
AIR_MATERIALS.add(Material.SAPLING.getId());
AIR_MATERIALS.add(Material.POWERED_RAIL.getId());
AIR_MATERIALS.add(Material.DETECTOR_RAIL.getId());
AIR_MATERIALS.add(Material.LONG_GRASS.getId());
AIR_MATERIALS.add(Material.DEAD_BUSH.getId());
AIR_MATERIALS.add(Material.YELLOW_FLOWER.getId());
AIR_MATERIALS.add(Material.RED_ROSE.getId());
AIR_MATERIALS.add(Material.BROWN_MUSHROOM.getId());
AIR_MATERIALS.add(Material.RED_MUSHROOM.getId());
AIR_MATERIALS.add(Material.TORCH.getId());
AIR_MATERIALS.add(Material.REDSTONE_WIRE.getId());
AIR_MATERIALS.add(Material.SEEDS.getId());
AIR_MATERIALS.add(Material.SIGN_POST.getId());
AIR_MATERIALS.add(Material.WOODEN_DOOR.getId());
AIR_MATERIALS.add(Material.LADDER.getId());
AIR_MATERIALS.add(Material.RAILS.getId());
AIR_MATERIALS.add(Material.WALL_SIGN.getId());
AIR_MATERIALS.add(Material.LEVER.getId());
AIR_MATERIALS.add(Material.STONE_PLATE.getId());
AIR_MATERIALS.add(Material.IRON_DOOR_BLOCK.getId());
AIR_MATERIALS.add(Material.WOOD_PLATE.getId());
AIR_MATERIALS.add(Material.REDSTONE_TORCH_OFF.getId());
AIR_MATERIALS.add(Material.REDSTONE_TORCH_ON.getId());
AIR_MATERIALS.add(Material.STONE_BUTTON.getId());
AIR_MATERIALS.add(Material.SUGAR_CANE_BLOCK.getId());
AIR_MATERIALS.add(Material.DIODE_BLOCK_OFF.getId());
AIR_MATERIALS.add(Material.DIODE_BLOCK_ON.getId());
AIR_MATERIALS.add(Material.TRAP_DOOR.getId());
AIR_MATERIALS.add(Material.PUMPKIN_STEM.getId());
AIR_MATERIALS.add(Material.MELON_STEM.getId());
AIR_MATERIALS.add(Material.VINE.getId());
AIR_MATERIALS.add(Material.NETHER_WARTS.getId());
AIR_MATERIALS.add(Material.WATER_LILY.getId());
for (Integer integer : AIR_MATERIALS)
{
throw new Exception(Util.i18n("destinationNotSet"));
AIR_MATERIALS_TARGET.add(integer.byteValue());
}
World world = loc.getWorld();
double x = Math.floor(loc.getX()) + 0.5;
double y = Math.floor(loc.getY());
double z = Math.floor(loc.getZ()) + 0.5;
AIR_MATERIALS_TARGET.add((byte)Material.WATER.getId());
AIR_MATERIALS_TARGET.add((byte)Material.STATIONARY_WATER.getId());
}
public static Location getTarget(final LivingEntity entity) throws Exception
{
final Block block = entity.getTargetBlock(AIR_MATERIALS_TARGET, 300);
if (block == null)
{
throw new Exception("Not targeting a block");
}
return block.getLocation();
}
public static Location getSafeDestination(final Location loc) throws Exception
{
if (loc == null || loc.getWorld() == null)
{
throw new Exception(_("destinationNotSet"));
}
final World world = loc.getWorld();
int x = loc.getBlockX();
int y = (int)Math.round(loc.getY());
int z = loc.getBlockZ();
while (isBlockAboveAir(world, x, y, z))
{
y -= 1.0D;
if (y < 0.0D)
y -= 1;
if (y < 0)
{
throw new Exception(Util.i18n("holeInFloor"));
break;
}
}
while (isBlockUnsafe(world, x, y, z))
{
y += 1.0D;
if (y >= 110.0D)
y += 1;
if (y >= 127)
{
x += 1.0D;
x += 1;
break;
}
}
while (isBlockUnsafe(world, x, y, z))
{
y -= 1.0D;
if (y <= 1.0D)
y -= 1;
if (y <= 1)
{
y = 110.0D;
x += 1.0D;
y = 127;
x += 1;
if (x - 32 > loc.getBlockX())
{
throw new Exception(_("holeInFloor"));
}
}
}
return new Location(world, x, y, z, loc.getYaw(), loc.getPitch());
return new Location(world, x + 0.5D, y, z + 0.5D, loc.getYaw(), loc.getPitch());
}
private static boolean isBlockAboveAir(World world, double x, double y, double z)
private static boolean isBlockAboveAir(final World world, final int x, final int y, final int z)
{
return world.getBlockAt((int)Math.floor(x), (int)Math.floor(y - 1.0D), (int)Math.floor(z)).getType() == Material.AIR;
return AIR_MATERIALS.contains(world.getBlockAt(x, y - 1, z).getType().getId());
}
public static boolean isBlockUnsafe(World world, double x, double y, double z)
public static boolean isBlockUnsafe(final World world, final int x, final int y, final int z)
{
Block below = world.getBlockAt((int)Math.floor(x), (int)Math.floor(y - 1.0D), (int)Math.floor(z));
final Block below = world.getBlockAt(x, y - 1, z);
if (below.getType() == Material.LAVA || below.getType() == Material.STATIONARY_LAVA)
{
return true;
@@ -275,18 +390,103 @@ public class Util
return true;
}
if ((world.getBlockAt((int)Math.floor(x), (int)Math.floor(y), (int)Math.floor(z)).getType() != Material.AIR)
|| (world.getBlockAt((int)Math.floor(x), (int)Math.floor(y + 1.0D), (int)Math.floor(z)).getType() != Material.AIR))
if ((!AIR_MATERIALS.contains(world.getBlockAt(x, y, z).getType().getId()))
|| (!AIR_MATERIALS.contains(world.getBlockAt(x, y + 1, z).getType().getId())))
{
return true;
}
return isBlockAboveAir(world, x, y, z);
}
public static ItemStack convertBlockToItem(final Block block)
{
final ItemStack is = new ItemStack(block.getType(), 1, (short)0, block.getData());
switch (is.getType())
{
case WOODEN_DOOR:
is.setType(Material.WOOD_DOOR);
is.setDurability((short)0);
break;
case IRON_DOOR_BLOCK:
is.setType(Material.IRON_DOOR);
is.setDurability((short)0);
break;
case SIGN_POST:
case WALL_SIGN:
is.setType(Material.SIGN);
is.setDurability((short)0);
break;
case CROPS:
is.setType(Material.SEEDS);
is.setDurability((short)0);
break;
case CAKE_BLOCK:
is.setType(Material.CAKE);
is.setDurability((short)0);
break;
case BED_BLOCK:
is.setType(Material.BED);
is.setDurability((short)0);
break;
case REDSTONE_WIRE:
is.setType(Material.REDSTONE);
is.setDurability((short)0);
break;
case REDSTONE_TORCH_OFF:
case REDSTONE_TORCH_ON:
is.setType(Material.REDSTONE_TORCH_ON);
is.setDurability((short)0);
break;
case DIODE_BLOCK_OFF:
case DIODE_BLOCK_ON:
is.setType(Material.DIODE);
is.setDurability((short)0);
break;
case DOUBLE_STEP:
is.setType(Material.STEP);
break;
case TORCH:
case RAILS:
case LADDER:
case WOOD_STAIRS:
case COBBLESTONE_STAIRS:
case LEVER:
case STONE_BUTTON:
case FURNACE:
case DISPENSER:
case PUMPKIN:
case JACK_O_LANTERN:
case WOOD_PLATE:
case STONE_PLATE:
case PISTON_STICKY_BASE:
case PISTON_BASE:
case IRON_FENCE:
case THIN_GLASS:
case TRAP_DOOR:
case FENCE:
case FENCE_GATE:
case NETHER_FENCE:
is.setDurability((short)0);
break;
case FIRE:
return null;
case PUMPKIN_STEM:
is.setType(Material.PUMPKIN_SEEDS);
break;
case MELON_STEM:
is.setType(Material.MELON_SEEDS);
break;
}
return is;
}
private static DecimalFormat df = new DecimalFormat("#0.00", DecimalFormatSymbols.getInstance(Locale.US));
public static String formatCurrency(double value)
public static String formatCurrency(final double value, final IEssentials ess)
{
String str = Essentials.getStatic().getSettings().getCurrencySymbol() + df.format(value);
@Cleanup
final ISettings settings = ess.getSettings();
settings.acquireReadLock();
String str = settings.getData().getEconomy().getCurrencySymbol() + df.format(value);
if (str.endsWith(".00"))
{
str = str.substring(0, str.length() - 3);
@@ -294,156 +494,156 @@ public class Util
return str;
}
public static double roundDouble(double d)
public static double roundDouble(final double d)
{
return Math.round(d * 100.0) / 100.0;
}
public static Locale getCurrentLocale()
{
return currentLocale;
}
private static class ConfigClassLoader extends ClassLoader
{
private final File dataFolder;
private final ClassLoader cl;
public ConfigClassLoader(File dataFolder, ClassLoader cl)
{
this.dataFolder = dataFolder;
this.cl = cl;
}
@Override
public URL getResource(String string)
{
File file = new File(dataFolder, string);
if (file.exists())
{
try
{
return file.toURI().toURL();
}
catch (MalformedURLException ex)
{
return cl.getResource(string);
}
}
return cl.getResource(string);
}
@Override
public synchronized void clearAssertionStatus()
{
cl.clearAssertionStatus();
}
@Override
public InputStream getResourceAsStream(String string)
{
File file = new File(dataFolder, string);
if (file.exists())
{
try
{
BufferedReader br = new BufferedReader(new FileReader(file));
String version = br.readLine();
br.close();
if (version == null || !version.equals("#version: " + Essentials.getStatic().getDescription().getVersion()))
{
logger.log(Level.WARNING, String.format("Translation file %s is not updated for Essentials version. Will use default.", file));
return cl.getResourceAsStream(string);
}
return new FileInputStream(file);
}
catch (IOException ex)
{
return cl.getResourceAsStream(string);
}
}
return cl.getResourceAsStream(string);
}
@Override
public Enumeration<URL> getResources(String string) throws IOException
{
return cl.getResources(string);
}
@Override
public Class<?> loadClass(String string) throws ClassNotFoundException
{
return cl.loadClass(string);
}
@Override
public synchronized void setClassAssertionStatus(String string, boolean bln)
{
cl.setClassAssertionStatus(string, bln);
}
@Override
public synchronized void setDefaultAssertionStatus(boolean bln)
{
cl.setDefaultAssertionStatus(bln);
}
@Override
public synchronized void setPackageAssertionStatus(String string, boolean bln)
{
cl.setPackageAssertionStatus(string, bln);
}
}
private static final Locale defaultLocale = Locale.getDefault();
private static Locale currentLocale = defaultLocale;
private static ResourceBundle bundle = ResourceBundle.getBundle("messages", defaultLocale);
private static ResourceBundle defaultBundle = ResourceBundle.getBundle("messages", Locale.US);
public static String i18n(String string)
public static boolean isInt(final String sInt)
{
try
{
return bundle.getString(string);
Integer.parseInt(sInt);
}
catch (MissingResourceException ex)
catch (NumberFormatException e)
{
logger.log(Level.WARNING, String.format("Missing translation key \"%s\" in translation file %s", ex.getKey(), bundle.getLocale().toString()), ex);
return defaultBundle.getString(string);
return false;
}
return true;
}
public static String format(String string, Object... objects)
public static String joinList(Object... list)
{
MessageFormat mf = new MessageFormat(i18n(string));
return mf.format(objects);
return joinList(", ", list);
}
public static void updateLocale(String loc, File dataFolder)
public static String joinList(String seperator, Object... list)
{
if (loc == null || loc.isEmpty())
StringBuilder buf = new StringBuilder();
for (Object each : list)
{
if (buf.length() > 0)
{
buf.append(seperator);
}
if (each instanceof Collection)
{
buf.append(joinList(seperator, ((Collection)each).toArray()));
}
else
{
try
{
buf.append(each.toString());
}
catch (Exception e)
{
buf.append(each.toString());
}
}
}
return buf.toString();
}
public static void registerPermissions(String path, Collection<String> nodes, boolean hasDefault, IEssentials ess)
{
if (nodes == null || nodes.isEmpty())
{
return;
}
String[] parts = loc.split("[_\\.]");
if (parts.length == 1)
final PluginManager pluginManager = ess.getServer().getPluginManager();
Permission basePerm = pluginManager.getPermission(path + ".*");
if (basePerm != null && !basePerm.getChildren().isEmpty())
{
currentLocale = new Locale(parts[0]);
basePerm.getChildren().clear();
}
if (parts.length == 2)
if (basePerm == null)
{
currentLocale = new Locale(parts[0], parts[1]);
basePerm = new Permission(path + ".*", PermissionDefault.OP);
pluginManager.addPermission(basePerm);
Permission mainPerm = pluginManager.getPermission("essentials.*");
if (mainPerm == null)
{
mainPerm = new Permission("essentials.*", PermissionDefault.OP);
pluginManager.addPermission(mainPerm);
}
mainPerm.getChildren().put(basePerm.getName(), Boolean.TRUE);
}
if (parts.length == 3)
for (String nodeName : nodes)
{
currentLocale = new Locale(parts[0], parts[1], parts[2]);
final String permissionName = path + "." + nodeName;
Permission perm = pluginManager.getPermission(permissionName);
if (perm == null)
{
final PermissionDefault defaultPerm = hasDefault && nodeName.equalsIgnoreCase("default") ? PermissionDefault.TRUE : PermissionDefault.OP;
perm = new Permission(permissionName, defaultPerm);
pluginManager.addPermission(perm);
}
basePerm.getChildren().put(permissionName, Boolean.TRUE);
}
logger.log(Level.INFO, String.format("Using locale %s", currentLocale.toString()));
bundle = ResourceBundle.getBundle("messages", currentLocale, new ConfigClassLoader(dataFolder, Util.class.getClassLoader()));
if (!bundle.keySet().containsAll(defaultBundle.keySet()))
basePerm.recalculatePermissibles();
}
private static transient final Pattern DOT_PATTERN = Pattern.compile("\\.");
public static Permission registerPermission(String permission, PermissionDefault defaultPerm)
{
final PluginManager pluginManager = Bukkit.getServer().getPluginManager();
final String[] parts = DOT_PATTERN.split(permission);
final StringBuilder builder = new StringBuilder(permission.length());
Permission parent = null;
for (int i = 0; i < parts.length - 1; i++)
{
logger.log(Level.WARNING, String.format("Translation file %s does not contain all translation keys.", currentLocale.toString()));
builder.append(parts[i]).append(".*");
String permString = builder.toString();
Permission perm = pluginManager.getPermission(permString);
if (perm == null)
{
perm = new Permission(permString, PermissionDefault.FALSE);
pluginManager.addPermission(perm);
if (parent != null)
{
parent.getChildren().put(perm.getName(), Boolean.TRUE);
}
parent = perm;
}
builder.deleteCharAt(builder.length() - 1);
}
Permission perm = pluginManager.getPermission(permission);
if (perm == null)
{
perm = new Permission(permission, defaultPerm);
pluginManager.addPermission(perm);
if (parent != null)
{
parent.getChildren().put(perm.getName(), Boolean.TRUE);
}
parent = perm;
}
perm.recalculatePermissibles();
return perm;
}
private static transient final Pattern VANILLA_COLOR_PATTERN = Pattern.compile("\u00A7+[0-9A-FKa-fk]");
private static transient final Pattern EASY_COLOR_PATTERN = Pattern.compile("&([0-9a-fk])");
public static String stripColor(final String input)
{
if (input == null)
{
return null;
}
return VANILLA_COLOR_PATTERN.matcher(input).replaceAll("");
}
public static String replaceColor(final String input)
{
if (input == null)
{
return null;
}
return EASY_COLOR_PATTERN.matcher(input).replaceAll("\u00a7$1");
}
}
@@ -1,122 +1,121 @@
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.IWarp;
import com.earth2me.essentials.api.IWarps;
import com.earth2me.essentials.api.InvalidNameException;
import com.earth2me.essentials.commands.WarpNotFoundException;
import com.earth2me.essentials.settings.WarpHolder;
import com.earth2me.essentials.storage.StorageObjectMap;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.*;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Server;
public class Warps implements IConf
public class Warps extends StorageObjectMap<IWarp> implements IWarps
{
private static final Logger logger = Logger.getLogger("Minecraft");
private final Map<StringIgnoreCase, EssentialsConf> warpPoints = new HashMap<StringIgnoreCase, EssentialsConf>();
private final File warpsFolder;
private final Server server;
private static final Logger logger = Bukkit.getLogger();
public Warps(Server server, File dataFolder)
public Warps(IEssentials ess)
{
this.server = server;
warpsFolder = new File(dataFolder, "warps");
if (!warpsFolder.exists())
{
warpsFolder.mkdirs();
}
reloadConfig();
super(ess, "warps");
}
@Override
public boolean isEmpty()
{
return warpPoints.isEmpty();
return getKeySize() == 0;
}
public Iterable<String> getWarpNames()
@Override
public Collection<String> getList()
{
List<String> keys = new ArrayList<String>();
for (StringIgnoreCase stringIgnoreCase : warpPoints.keySet())
final List<String> names = new ArrayList<String>();
for (String key : getAllKeys())
{
keys.add(stringIgnoreCase.getString());
}
Collections.sort(keys, String.CASE_INSENSITIVE_ORDER);
return keys;
}
public Location getWarp(String warp) throws Exception
{
EssentialsConf conf = warpPoints.get(new StringIgnoreCase(warp));
if (conf == null)
{
throw new Exception(Util.i18n("warpNotExist"));
}
return conf.getLocation(null, server);
}
public void setWarp(String name, Location loc) throws Exception
{
String filename = Util.sanitizeFileName(name);
EssentialsConf conf = warpPoints.get(new StringIgnoreCase(name));
if (conf == null)
{
File confFile = new File(warpsFolder, filename + ".yml");
if (confFile.exists())
IWarp warp = getObject(key);
if (warp == null)
{
throw new Exception(Util.i18n("similarWarpExist"));
continue;
}
conf = new EssentialsConf(confFile);
warpPoints.put(new StringIgnoreCase(name), conf);
}
conf.setProperty(null, loc);
conf.setProperty("name", name);
conf.save();
}
public void delWarp(String name) throws Exception
{
EssentialsConf conf = warpPoints.get(new StringIgnoreCase(name));
if (conf == null)
{
throw new Exception(Util.i18n("warpNotExist"));
}
if (!conf.getFile().delete())
{
throw new Exception(Util.i18n("warpDeleteError"));
}
warpPoints.remove(new StringIgnoreCase(name));
}
public final void reloadConfig()
{
warpPoints.clear();
File[] listOfFiles = warpsFolder.listFiles();
if (listOfFiles.length >= 1)
{
for (int i = 0; i < listOfFiles.length; i++)
warp.acquireReadLock();
try
{
String filename = listOfFiles[i].getName();
if (listOfFiles[i].isFile() && filename.endsWith(".yml"))
{
try
{
EssentialsConf conf = new EssentialsConf(listOfFiles[i]);
conf.load();
String name = conf.getString("name");
if (name != null)
{
warpPoints.put(new StringIgnoreCase(name), conf);
}
}
catch (Exception ex)
{
logger.log(Level.WARNING, Util.format("loadWarpError", filename), ex);
}
}
names.add(warp.getData().getName());
}
finally
{
warp.unlock();
}
}
Collections.sort(names, String.CASE_INSENSITIVE_ORDER);
return names;
}
@Override
public Location getWarp(final String name) throws Exception
{
IWarp warp = getObject(name);
if (warp == null)
{
throw new WarpNotFoundException(_("warpNotExist"));
}
warp.acquireReadLock();
try
{
return warp.getData().getLocation().getBukkitLocation();
}
finally
{
warp.unlock();
}
}
@Override
public void setWarp(final String name, final Location loc) throws Exception
{
setWarp(name, new com.earth2me.essentials.storage.Location(loc));
}
public void setWarp(final String name, final com.earth2me.essentials.storage.Location loc) throws Exception
{
IWarp warp = getObject(name);
if (warp == null)
{
warp = new WarpHolder(name, ess);
}
warp.acquireWriteLock();
try
{
warp.getData().setLocation(loc);
}
finally
{
warp.unlock();
}
}
@Override
public void removeWarp(final String name) throws Exception
{
removeObject(name);
}
@Override
public File getWarpFile(String name) throws InvalidNameException
{
return getStorageFile(name);
}
@Override
public IWarp load(String name) throws Exception
{
final IWarp warp = new WarpHolder(name, ess);
warp.onReload();
return warp;
}
@@ -132,7 +131,7 @@ public class Warps implements IConf
@Override
public int hashCode()
{
return getString().toLowerCase().hashCode();
return getString().toLowerCase(Locale.ENGLISH).hashCode();
}
@Override
@@ -1,54 +1,86 @@
package com.earth2me.essentials;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.IWorth;
import com.earth2me.essentials.storage.AsyncStorageObjectHolder;
import com.earth2me.essentials.storage.EnchantmentLevel;
import java.io.File;
import java.util.logging.Logger;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.MaterialData;
public class Worth implements IConf
public class Worth extends AsyncStorageObjectHolder<com.earth2me.essentials.settings.Worth> implements IWorth
{
private static final Logger logger = Logger.getLogger("Minecraft");
private final EssentialsConf config;
public Worth(File dataFolder)
public Worth(final IEssentials ess)
{
config = new EssentialsConf(new File(dataFolder, "worth.yml"));
config.setTemplateName("/worth.yml");
config.load();
super(ess, com.earth2me.essentials.settings.Worth.class);
onReload(false);
}
public double getPrice(ItemStack itemStack)
@Override
public double getPrice(final ItemStack itemStack)
{
String itemname = itemStack.getType().toString().toLowerCase().replace("_", "");
double result;
result = config.getDouble("worth."+itemname+"."+itemStack.getDurability(), Double.NaN);
if (Double.isNaN(result)) {
result = config.getDouble("worth."+itemname+".0", Double.NaN);
this.acquireReadLock();
try
{
final Map<MaterialData, Double> prices = this.getData().getSell();
if (prices == null || itemStack == null)
{
return Double.NaN;
}
final Double basePrice = prices.get(itemStack.getData());
if (basePrice == null || Double.isNaN(basePrice))
{
return Double.NaN;
}
double multiplier = 1.0;
if (itemStack.getType().getMaxDurability() > 0) {
multiplier *= (double)itemStack.getDurability() / (double)itemStack.getType().getMaxDurability();
}
if (itemStack.getEnchantments() != null && !itemStack.getEnchantments().isEmpty())
{
final Map<EnchantmentLevel, Double> enchantmentMultipliers = this.getData().getEnchantmentMultiplier();
if (enchantmentMultipliers != null)
{
for (Map.Entry<Enchantment, Integer> entry : itemStack.getEnchantments().entrySet())
{
final Double enchMult = enchantmentMultipliers.get(new EnchantmentLevel(entry.getKey(), entry.getValue()));
if (enchMult != null)
{
multiplier *= enchMult;
}
}
}
}
return basePrice * multiplier;
}
if (Double.isNaN(result)) {
result = config.getDouble("worth."+itemname, Double.NaN);
finally
{
this.unlock();
}
if (Double.isNaN(result)) {
result = config.getDouble("worth-"+itemStack.getTypeId(), Double.NaN);
}
return result;
}
public void setPrice(ItemStack itemStack, double price)
@Override
public void setPrice(final ItemStack itemStack, final double price)
{
if (itemStack.getType().getData() == null) {
config.setProperty("worth." + itemStack.getType().toString().toLowerCase().replace("_", ""), price);
} else {
// Bukkit-bug: getDurability still contains the correct value, while getData().getData() is 0.
config.setProperty("worth." + itemStack.getType().toString().toLowerCase().replace("_", "")+"."+itemStack.getDurability(), price);
acquireWriteLock();
try {
if (getData().getSell() == null) {
getData().setSell(new HashMap<MaterialData, Double>());
}
getData().getSell().put(itemStack.getData(), price);
} finally {
unlock();
}
config.removeProperty("worth-"+itemStack.getTypeId());
config.save();
}
public void reloadConfig()
@Override
public File getStorageFile() throws IOException
{
config.load();
return new File(ess.getDataFolder(), "worth.yml");
}
}
@@ -0,0 +1,15 @@
package com.earth2me.essentials.api;
public class ChargeException extends Exception
{
public ChargeException(final String message)
{
super(message);
}
public ChargeException(final String message, final Throwable throwable)
{
super(message, throwable);
}
}
@@ -0,0 +1,7 @@
package com.earth2me.essentials.api;
public interface IBackup extends Runnable
{
public void startTask();
}
@@ -0,0 +1,20 @@
package com.earth2me.essentials.api;
import java.util.Map;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
public interface ICommandHandler extends IReload
{
Map<String, String> disabledCommands();
public void removePlugin(Plugin plugin);
public void addPlugin(Plugin plugin);
boolean handleCommand(CommandSender sender, Command command, String commandLabel, String[] args);
void showCommandError(CommandSender sender, String commandLabel, Throwable exception);
}
@@ -0,0 +1,21 @@
package com.earth2me.essentials.api;
public interface IEconomy extends IReload
{
public double getMoney(String name) throws UserDoesNotExistException;
public void setMoney(String name, double balance) throws UserDoesNotExistException, NoLoanPermittedException;
public void resetBalance(String name) throws UserDoesNotExistException, NoLoanPermittedException;
public String format(double amount);
public boolean playerExists(String name);
public boolean isNPC(String name) throws UserDoesNotExistException;
public boolean createNPC(String name);
public void removeNPC(String name) throws UserDoesNotExistException;
}
@@ -0,0 +1,64 @@
package com.earth2me.essentials.api;
import com.earth2me.essentials.listener.TntExplodeListener;
import com.earth2me.essentials.register.payment.Methods;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public interface IEssentials extends Plugin
{
void addReloadListener(IReload listener);
IUser getUser(Player player);
IUser getUser(String playerName);
int broadcastMessage(IUser sender, String message);
II18n getI18n();
ISettings getSettings();
IGroups getGroups();
IJails getJails();
IKits getKits();
IWarps getWarps();
IWorth getWorth();
IItemDb getItemDb();
IUserMap getUserMap();
IBackup getBackup();
ICommandHandler getCommandHandler();
World getWorld(String name);
Methods getPaymentMethod();
int scheduleAsyncDelayedTask(Runnable run);
int scheduleSyncDelayedTask(Runnable run);
int scheduleSyncDelayedTask(Runnable run, long delay);
int scheduleSyncRepeatingTask(Runnable run, long delay, long period);
//IPermissionsHandler getPermissionsHandler();
void reload();
TntExplodeListener getTNTListener();
void setGroups(IGroups groups);
void removeReloadListener(IReload groups);
IEconomy getEconomy();
}
@@ -0,0 +1,6 @@
package com.earth2me.essentials.api;
public interface IEssentialsModule
{
}
@@ -0,0 +1,25 @@
package com.earth2me.essentials.api;
import java.text.MessageFormat;
public interface IGroups
{
String getMainGroup(IUser player);
boolean inGroup(IUser player, String groupname);
double getHealCooldown(IUser player);
double getTeleportCooldown(IUser player);
double getTeleportDelay(IUser player);
String getPrefix(IUser player);
String getSuffix(IUser player);
int getHomeLimit(IUser player);
MessageFormat getChatFormat(IUser player);
}
@@ -0,0 +1,9 @@
package com.earth2me.essentials.api;
import java.util.Locale;
public interface II18n
{
Locale getCurrentLocale();
}
@@ -0,0 +1,13 @@
package com.earth2me.essentials.api;
import org.bukkit.inventory.ItemStack;
public interface IItemDb extends IReload
{
ItemStack get(final String name, final IUser user) throws Exception;
ItemStack get(final String name, final int quantity) throws Exception;
ItemStack get(final String name) throws Exception;
}
@@ -0,0 +1,18 @@
package com.earth2me.essentials.api;
import java.util.Collection;
import org.bukkit.Location;
public interface IJails extends IReload
{
Location getJail(String jailName) throws Exception;
Collection<String> getList() throws Exception;
void removeJail(String jail) throws Exception;
void sendToJail(IUser user, String jail) throws Exception;
void setJail(String jailName, Location loc) throws Exception;
}
@@ -0,0 +1,18 @@
package com.earth2me.essentials.api;
import com.earth2me.essentials.settings.Kit;
import java.util.Collection;
public interface IKits extends IReload
{
Kit getKit(String kit) throws Exception;
void sendKit(IUser user, String kit) throws Exception;
void sendKit(IUser user, Kit kit) throws Exception;
Collection<String> getList() throws Exception;
boolean isEmpty();
}
@@ -0,0 +1,17 @@
package com.earth2me.essentials.api;
import org.bukkit.command.CommandSender;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault;
public interface IPermission
{
String getPermission();
boolean isAuthorized(CommandSender sender);
Permission getBukkitPermission();
PermissionDefault getPermissionDefault();
}
@@ -0,0 +1,7 @@
package com.earth2me.essentials.api;
public interface IReload
{
void onReload();
}
@@ -0,0 +1,11 @@
package com.earth2me.essentials.api;
import org.bukkit.command.CommandSender;
public interface IReplyTo
{
void setReplyTo(CommandSender user);
CommandSender getReplyTo();
}
@@ -0,0 +1,14 @@
package com.earth2me.essentials.api;
import com.earth2me.essentials.settings.Settings;
import com.earth2me.essentials.storage.IStorageObjectHolder;
public interface ISettings extends IStorageObjectHolder<Settings>
{
public String getLocale();
public boolean isDebug();
public void setDebug(boolean b);
}
@@ -0,0 +1,28 @@
package com.earth2me.essentials.api;
import com.earth2me.essentials.Trade;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
public interface ITeleport
{
void now(Location loc, boolean cooldown, TeleportCause cause) throws Exception;
void now(Entity entity, boolean cooldown, TeleportCause cause) throws Exception;
void back(Trade chargeFor) throws Exception;
void teleport(Location bed, Trade charge, TeleportCause teleportCause) throws Exception;
void teleport(Entity entity, Trade chargeFor, TeleportCause cause) throws Exception;
void home(IUser player, String toLowerCase, Trade charge) throws Exception;
void respawn(Trade charge, TeleportCause teleportCause) throws Exception;
void back() throws Exception;
public void warp(String name, Trade charge, TeleportCause teleportCause) throws Exception;
}
@@ -0,0 +1,104 @@
package com.earth2me.essentials.api;
import com.earth2me.essentials.storage.IStorageObjectHolder;
import com.earth2me.essentials.user.CooldownException;
import com.earth2me.essentials.user.UserData;
import java.util.List;
import org.bukkit.Location;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public interface IUser extends Player, IStorageObjectHolder<UserData>, IReload, IReplyTo, Comparable<IUser>
{
Player getBase();
double getMoney();
void takeMoney(double value);
void takeMoney(double value, CommandSender initiator);
void giveMoney(double value);
void giveMoney(double value, CommandSender initiator);
void giveItems(ItemStack itemStack, Boolean canSpew) throws ChargeException;
void giveItems(List<ItemStack> itemStacks, Boolean canSpew) throws ChargeException;
void setMoney(double value);
void payUser(final IUser reciever, final double value) throws Exception;
void setLastLocation();
Location getHome(String name) throws Exception;
Location getHome(Location loc);
boolean isHidden();
ITeleport getTeleport();
void checkCooldown(UserData.TimestampType cooldownType, double cooldown, boolean set, IPermission bypassPermission) throws CooldownException;
boolean toggleAfk();
void updateActivity(boolean broadcast);
void updateDisplayName();
boolean checkJailTimeout(long currentTime);
boolean checkMuteTimeout(long currentTime);
boolean checkBanTimeout(long currentTime);
long getTimestamp(UserData.TimestampType name);
void setTimestamp(UserData.TimestampType name, long value);
void setLastOnlineActivity(long currentTime);
void checkActivity();
long getLastOnlineActivity();
boolean isGodModeEnabled();
boolean isIgnoringPlayer(String name);
void setIgnoredPlayer(String name, boolean set);
Location getAfkPosition();
boolean toggleGodModeEnabled();
void dispose();
void updateCompass();
List<String> getHomes();
void addMail(String string);
boolean toggleMuted();
boolean toggleSocialSpy();
void requestTeleport(IUser user, boolean b);
boolean isTeleportRequestHere();
IUser getTeleportRequester();
boolean toggleTeleportEnabled();
long getTeleportRequestTime();
boolean gotMailInfo();
List<String> getMails();
}
@@ -0,0 +1,23 @@
package com.earth2me.essentials.api;
import java.io.File;
import java.util.Set;
import org.bukkit.entity.Player;
public interface IUserMap extends IReload
{
boolean userExists(final String name);
IUser getUser(final Player player);
IUser getUser(final String playerName);
void removeUser(final String name) throws InvalidNameException;
Set<String> getAllUniqueUsers();
int getUniqueUsers();
File getUserFile(final String name) throws InvalidNameException;
}
@@ -0,0 +1,9 @@
package com.earth2me.essentials.api;
import com.earth2me.essentials.settings.Warp;
import com.earth2me.essentials.storage.IStorageObjectHolder;
public interface IWarp extends IStorageObjectHolder<Warp>
{
}
@@ -0,0 +1,21 @@
package com.earth2me.essentials.api;
import java.io.File;
import java.util.Collection;
import org.bukkit.Location;
public interface IWarps extends IReload
{
Location getWarp(String warp) throws Exception;
Collection<String> getList();
void removeWarp(String name) throws Exception;
void setWarp(String name, Location loc) throws Exception;
public boolean isEmpty();
public File getWarpFile(String name) throws InvalidNameException;
}
@@ -0,0 +1,11 @@
package com.earth2me.essentials.api;
import org.bukkit.inventory.ItemStack;
public interface IWorth extends IReload
{
double getPrice(ItemStack itemStack);
void setPrice(ItemStack itemStack, double price);
}
@@ -0,0 +1,10 @@
package com.earth2me.essentials.api;
public class InvalidNameException extends Exception
{
public InvalidNameException(Throwable thrwbl)
{
super(thrwbl);
}
}
@@ -1,13 +1,12 @@
package com.earth2me.essentials.api;
import com.earth2me.essentials.Util;
import static com.earth2me.essentials.I18n._;
public class NoLoanPermittedException extends Exception
{
public NoLoanPermittedException()
{
super(Util.i18n("negativeBalanceError"));
super(_("negativeBalanceError"));
}
}
@@ -1,13 +1,12 @@
package com.earth2me.essentials.api;
import com.earth2me.essentials.Util;
import static com.earth2me.essentials.I18n._;
public class UserDoesNotExistException extends Exception
{
public UserDoesNotExistException(String name)
{
super(Util.format("userDoesNotExist", name));
super(_("userDoesNotExist", name));
}
}
@@ -1,29 +1,55 @@
package com.earth2me.essentials.commands;
import org.bukkit.Server;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.perm.Permissions;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionDefault;
public class Commandafk extends EssentialsCommand
{
public Commandafk()
{
super("afk");
}
@Override
public void run(Server server, User user, String commandLabel, String[] args) throws Exception
public void run(final IUser user, final String commandLabel, final String[] args) throws Exception
{
charge(user);
if (!user.toggleAfk())
if (args.length > 0 && Permissions.AFK_OTHERS.isAuthorized(user))
{
user.sendMessage(Util.i18n("markedAsNotAway"));
ess.broadcastMessage(user.getName(), Util.format("userIsNotAway", user.getDisplayName()));
} else {
user.sendMessage(Util.i18n("markedAsAway"));
ess.broadcastMessage(user.getName(), Util.format("userIsAway", user.getDisplayName()));
IUser afkUser = ess.getUser((Player)ess.getServer().matchPlayer(args[0]));
if (afkUser != null)
{
toggleAfk(afkUser);
}
}
else
{
toggleAfk(user);
}
}
private void toggleAfk(IUser user)
{
if (!user.toggleAfk())
{
//user.sendMessage(_("markedAsNotAway"));
if (!user.isHidden())
{
ess.broadcastMessage(user, _("userIsNotAway", user.getDisplayName()));
}
user.updateActivity(false);
}
else
{
//user.sendMessage(_("markedAsAway"));
if (!user.isHidden())
{
ess.broadcastMessage(user, _("userIsAway", user.getDisplayName()));
}
}
}
@Override
public PermissionDefault getPermissionDefault()
{
return PermissionDefault.TRUE;
}
}
@@ -1,33 +1,20 @@
package com.earth2me.essentials.commands;
import net.minecraft.server.EntityTNTPrimed;
import net.minecraft.server.World;
import com.earth2me.essentials.Util;
import com.earth2me.essentials.api.IUser;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.craftbukkit.CraftWorld;
import com.earth2me.essentials.User;
import com.earth2me.essentials.TargetBlock;
import org.bukkit.entity.TNTPrimed;
public class Commandantioch extends EssentialsCommand
{
public Commandantioch()
{
super("antioch");
}
@Override
public void run(Server server, User user, String commandLabel, String[] args) throws Exception
public void run(final IUser user, final String commandLabel, final String[] args) throws Exception
{
charge(user);
ess.broadcastMessage(user.getName(), "...lobbest thou thy Holy Hand Grenade of Antioch towards thy foe,");
ess.broadcastMessage(user.getName(), "who being naughty in My sight, shall snuff it.");
ess.broadcastMessage(user, "...lobbest thou thy Holy Hand Grenade of Antioch towards thy foe,");
ess.broadcastMessage(user, "who being naughty in My sight, shall snuff it.");
Location loc = user.getLocation();
World world = ((CraftWorld)user.getWorld()).getHandle();
loc = new TargetBlock(user).getTargetBlock().getLocation();
EntityTNTPrimed tnt = new EntityTNTPrimed(world, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
world.addEntity(tnt);
world.makeSound(tnt, "random.fuse", 1.0F, 1.0F);
final Location loc = Util.getTarget(user);
loc.getWorld().spawn(loc, TNTPrimed.class);
}
}
@@ -1,24 +1,19 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.Charge;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import org.bukkit.Server;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.api.IUser;
public class Commandback extends EssentialsCommand
{
public Commandback()
{
super("back");
}
@Override
protected void run(Server server, User user, String commandLabel, String[] args) throws Exception
protected void run(final IUser user, final String commandLabel, final String[] args) throws Exception
{
Charge charge = new Charge(this.getName(), ess);
final Trade charge = new Trade(commandName, ess);
charge.isAffordableFor(user);
user.sendMessage(Util.i18n("backUsageMsg"));
user.sendMessage(_("backUsageMsg"));
user.getTeleport().back(charge);
throw new NoChargeException();
}
}
@@ -1,28 +1,17 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.Backup;
import com.earth2me.essentials.Util;
import org.bukkit.Server;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IBackup;
import org.bukkit.command.CommandSender;
public class Commandbackup extends EssentialsCommand
{
public Commandbackup()
{
super("backup");
}
@Override
protected void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception
protected void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
Backup backup = ess.getBackup();
if (backup == null)
{
return;
}
charge(sender);
final IBackup backup = ess.getBackup();
backup.run();
sender.sendMessage(Util.i18n("backupStarted"));
sender.sendMessage(_("backupStarted"));
}
}
@@ -1,37 +1,31 @@
package com.earth2me.essentials.commands;
import org.bukkit.Server;
import com.earth2me.essentials.User;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.Util;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.perm.Permissions;
import org.bukkit.command.CommandSender;
public class Commandbalance extends EssentialsCommand
{
public Commandbalance()
{
super("balance");
}
@Override
protected void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception
protected void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
if (args.length < 1)
{
throw new NotEnoughArgumentsException();
}
sender.sendMessage(Util.format("balance", Util.formatCurrency(getPlayer(server, args, 0).getMoney())));
sender.sendMessage(_("balance", Util.formatCurrency(getPlayer(args, 0, true).getMoney(), ess)));
}
@Override
public void run(Server server, User user, String commandLabel, String[] args) throws Exception
public void run(final IUser user, final String commandLabel, final String[] args) throws Exception
{
charge(user);
double bal = (args.length < 1
|| !(user.isAuthorized("essentials.balance.others")
|| user.isAuthorized("essentials.balance.other"))
? user
: getPlayer(server, args, 0)).getMoney();
user.sendMessage(Util.format("balance", Util.formatCurrency(bal)));
final double bal = (args.length < 1
|| !Permissions.BALANCE_OTHERS.isAuthorized(user)
? user
: getPlayer(args, 0, true)).getMoney();
user.sendMessage(_("balance", Util.formatCurrency(bal, ess)));
}
}
@@ -0,0 +1,173 @@
package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.Util;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.textreader.ArrayListInput;
import com.earth2me.essentials.textreader.TextPager;
import java.text.DateFormat;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.bukkit.command.CommandSender;
public class Commandbalancetop extends EssentialsCommand
{
private static final int CACHETIME = 2 * 60 * 1000;
public static final int MINUSERS = 50;
private static ArrayListInput cache = new ArrayListInput();
private static long cacheage = 0;
private static ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
@Override
protected void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
int page = 0;
boolean force = false;
if (args.length > 0)
{
try
{
page = Integer.parseInt(args[0]);
}
catch (NumberFormatException ex)
{
if (args[0].equalsIgnoreCase("force") && sender.isOp())
{
force = true;
}
}
}
if (!force && lock.readLock().tryLock())
{
try
{
if (cacheage > System.currentTimeMillis() - CACHETIME)
{
outputCache(sender, page);
return;
}
if (ess.getUserMap().getUniqueUsers() > MINUSERS)
{
sender.sendMessage(_("orderBalances", ess.getUserMap().getUniqueUsers()));
}
}
finally
{
lock.readLock().unlock();
}
ess.scheduleAsyncDelayedTask(new Viewer(sender, page, force));
}
else
{
if (ess.getUserMap().getUniqueUsers() > MINUSERS)
{
sender.sendMessage(_("orderBalances", ess.getUserMap().getUniqueUsers()));
}
ess.scheduleAsyncDelayedTask(new Viewer(sender, page, force));
}
}
private static void outputCache(final CommandSender sender, int page)
{
final Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(cacheage);
final DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
sender.sendMessage(_("balanceTop", format.format(cal.getTime())));
new TextPager(cache).showPage(Integer.toString(page), "", "balancetop", sender);
}
private class Calculator implements Runnable
{
private final transient Viewer viewer;
private final boolean force;
public Calculator(final Viewer viewer, final boolean force)
{
this.viewer = viewer;
this.force = force;
}
@Override
public void run()
{
lock.writeLock().lock();
try
{
if (force || cacheage <= System.currentTimeMillis() - CACHETIME)
{
cache.getLines().clear();
final Map<String, Double> balances = new HashMap<String, Double>();
for (String u : ess.getUserMap().getAllUniqueUsers())
{
final IUser user = ess.getUserMap().getUser(u);
if (user != null)
{
balances.put(user.getDisplayName(), user.getMoney());
}
}
final List<Map.Entry<String, Double>> sortedEntries = new ArrayList<Map.Entry<String, Double>>(balances.entrySet());
Collections.sort(sortedEntries, new Comparator<Map.Entry<String, Double>>()
{
@Override
public int compare(final Entry<String, Double> entry1, final Entry<String, Double> entry2)
{
return -entry1.getValue().compareTo(entry2.getValue());
}
});
int pos = 1;
for (Map.Entry<String, Double> entry : sortedEntries)
{
cache.getLines().add(pos + ". " + entry.getKey() + ", " + Util.formatCurrency(entry.getValue(), ess));
pos++;
}
cacheage = System.currentTimeMillis();
}
}
finally
{
lock.writeLock().unlock();
}
ess.scheduleAsyncDelayedTask(viewer);
}
}
private class Viewer implements Runnable
{
private final transient CommandSender sender;
private final transient int page;
private final transient boolean force;
public Viewer(final CommandSender sender, final int page, final boolean force)
{
this.sender = sender;
this.page = page;
this.force = force;
}
@Override
public void run()
{
lock.readLock().lock();
try
{
if (!force && cacheage > System.currentTimeMillis() - CACHETIME)
{
outputCache(sender, page);
return;
}
}
finally
{
lock.readLock().unlock();
}
ess.scheduleAsyncDelayedTask(new Calculator(new Viewer(sender, page, force), force));
}
}
}
@@ -1,45 +1,66 @@
package com.earth2me.essentials.commands;
import org.bukkit.Server;
import com.earth2me.essentials.Console;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.perm.Permissions;
import com.earth2me.essentials.user.Ban;
import lombok.Cleanup;
import org.bukkit.command.CommandSender;
import org.bukkit.craftbukkit.CraftServer;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import org.bukkit.entity.Player;
public class Commandban extends EssentialsCommand
{
public Commandban()
{
super("ban");
}
@Override
public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception
public void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
if (args.length < 1)
{
throw new NotEnoughArgumentsException();
}
User p = null;
if (server.matchPlayer(args[0]).isEmpty())
@Cleanup
final IUser user = getPlayer(args, 0, true);
if (user.isOnline())
{
((CraftServer)server).getHandle().a(args[0]);
sender.sendMessage(Util.format("playerBanned",args[0]));
if (Permissions.BAN_EXEMPT.isAuthorized(user))
{
sender.sendMessage(_("banExempt"));
return;
}
}
else
{
p = ess.getUser(server.matchPlayer(args[0]).get(0));
String banReason = Util.i18n("defaultBanReason");
if(args.length > 1) {
banReason = getFinalArg(args, 1);
p.setBanReason(commandLabel);
if (Permissions.BAN_OFFLINE.isAuthorized(sender))
{
sender.sendMessage(_("banExempt"));
return;
}
}
user.acquireWriteLock();
String banReason;
user.getData().setBan(new Ban());
if (args.length > 1)
{
banReason = getFinalArg(args, 1);
user.getData().getBan().setReason(banReason);
}
else
{
banReason = _("defaultBanReason");
}
user.setBanned(true);
user.kickPlayer(banReason);
final String senderName = sender instanceof Player ? ((Player)sender).getDisplayName() : Console.NAME;
for (Player onlinePlayer : server.getOnlinePlayers())
{
final IUser player = ess.getUser(onlinePlayer);
if (Permissions.BAN_NOTIFY.isAuthorized(player))
{
onlinePlayer.sendMessage(_("playerBanned", senderName, user.getName(), banReason));
}
p.kickPlayer(banReason);
((CraftServer)server).getHandle().a(p.getName());
sender.sendMessage(Util.format("playerBanned", p.getName()));
}
ess.loadBanList();
}
}
@@ -1,29 +1,39 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.Util;
import org.bukkit.Server;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IUser;
import lombok.Cleanup;
import org.bukkit.command.CommandSender;
import org.bukkit.craftbukkit.CraftServer;
public class Commandbanip extends EssentialsCommand
{
public Commandbanip()
{
super("banip");
}
@Override
public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception
public void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
if (args.length < 1)
{
throw new NotEnoughArgumentsException();
}
((CraftServer)server).getHandle().c(args[0]);
sender.sendMessage(Util.i18n("banIpAddress"));
ess.loadBanList();
@Cleanup
final IUser player = ess.getUser(args[0]);
player.acquireReadLock();
if (player == null)
{
ess.getServer().banIP(args[0]);
sender.sendMessage(_("banIpAddress"));
}
else
{
final String ipAddress = player.getData().getIpAddress();
if (ipAddress.length() == 0)
{
throw new Exception(_("playerNotFound"));
}
ess.getServer().banIP(player.getData().getIpAddress());
sender.sendMessage(_("banIpAddress"));
}
}
}
@@ -1,23 +1,18 @@
package com.earth2me.essentials.commands;
import org.bukkit.Server;
import org.bukkit.TreeType;
import com.earth2me.essentials.User;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.Util;
import com.earth2me.essentials.api.IUser;
import org.bukkit.Location;
import org.bukkit.TreeType;
public class Commandbigtree extends EssentialsCommand
{
public Commandbigtree()
{
super("bigtree");
}
@Override
public void run(Server server, User user, String commandLabel, String[] args) throws Exception
public void run(final IUser user, final String commandLabel, final String[] args) throws Exception
{
TreeType tree = TreeType.TREE;
TreeType tree;
if (args.length > 0 && args[0].equalsIgnoreCase("redwood"))
{
tree = TreeType.TALL_REDWOOD;
@@ -31,39 +26,16 @@ public class Commandbigtree extends EssentialsCommand
throw new NotEnoughArgumentsException();
}
double x = user.getLocation().getX();
double y = user.getLocation().getY();
double z = user.getLocation().getZ();
// offset tree in direction player is facing
int r = (int)user.getCorrectedYaw();
if (r < 68 || r > 292) // north
{
x -= 3.0D;
}
else if (r > 112 && r < 248) // south
{
x += 3.0D;
}
if (r > 22 && r < 158) // east
{
z -= 3.0D;
}
else if (r > 202 && r < 338) // west
{
z += 3.0D;
}
Location safeLocation = Util.getSafeDestination(new Location(user.getWorld(), x, y, z));
boolean success = user.getWorld().generateTree(safeLocation, (TreeType)tree);
final Location loc = Util.getTarget(user);
final Location safeLocation = Util.getSafeDestination(loc);
final boolean success = user.getWorld().generateTree(safeLocation, tree);
if (success)
{
charge(user);
user.sendMessage(Util.i18n("bigTreeSuccess"));
user.sendMessage(_("bigTreeSuccess"));
}
else
{
user.sendMessage(Util.i18n("bigTreeFailure"));
throw new Exception(_("bigTreeFailure"));
}
}
}
@@ -0,0 +1,40 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.perm.Permissions;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.event.block.BlockBreakEvent;
public class Commandbreak extends EssentialsCommand
{
//TODO: Switch to use util class
@Override
public void run(final IUser user, final String commandLabel, final String[] args) throws Exception
{
final Block block = user.getTargetBlock(null, 20);
if (block == null)
{
throw new NoChargeException();
}
if (block.getType() == Material.AIR)
{
throw new NoChargeException();
}
if (block.getType() == Material.BEDROCK && !Permissions.BREAK_BEDROCK.isAuthorized(user))
{
throw new Exception("You are not allowed to destroy bedrock."); //TODO: Translation
}
final BlockBreakEvent event = new BlockBreakEvent(block, user.getBase());
server.getPluginManager().callEvent(event);
if (event.isCancelled())
{
throw new NoChargeException();
}
else
{
block.setType(Material.AIR);
}
}
}
@@ -1,29 +1,19 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.Console;
import com.earth2me.essentials.Util;
import org.bukkit.Server;
import static com.earth2me.essentials.I18n._;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class Commandbroadcast extends EssentialsCommand
{
public Commandbroadcast()
{
super("broadcast");
}
@Override
public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception
public void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
if (args.length < 1)
{
throw new NotEnoughArgumentsException();
}
charge(sender);
ess.broadcastMessage(sender instanceof Player ? ((Player)sender).getName() : Console.NAME,
Util.format("broadcast", getFinalArg(args, 0)));
ess.broadcastMessage(null, _("broadcast", getFinalArg(args, 0)));
}
}
@@ -1,31 +1,24 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.Util;
import org.bukkit.Server;
import static com.earth2me.essentials.I18n._;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class Commandburn extends EssentialsCommand
{
public Commandburn()
{
super("burn");
}
@Override
protected void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception
protected void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
if (args.length < 2)
{
throw new NotEnoughArgumentsException();
}
charge(sender);
for (Player p : server.matchPlayer(args[0]))
{
p.setFireTicks(Integer.parseInt(args[1]) * 20);
sender.sendMessage(Util.format("burnMsg", p.getDisplayName(), Integer.parseInt(args[1])));
sender.sendMessage(_("burnMsg", p.getDisplayName(), Integer.parseInt(args[1])));
}
}
}
@@ -1,67 +1,60 @@
package com.earth2me.essentials.commands;
import org.bukkit.Server;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.perm.Permissions;
import java.util.List;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import java.util.List;
import org.bukkit.ChatColor;
public class Commandclearinventory extends EssentialsCommand
{
public Commandclearinventory()
{
super("clearinventory");
}
//TODO: Cleanup
@Override
public void run(Server server, User user, String commandLabel, String[] args) throws Exception
public void run(final IUser user, final String commandLabel, final String[] args) throws Exception
{
if (args.length > 0 && user.isAuthorized("essentials.clearinventory.others"))
if (args.length > 0 && Permissions.CLEARINVENTORY_OTHERS.isAuthorized(user))
{
//TODO: Fix fringe user match case.
if (args[0].length() >= 3)
{
List<Player> online = server.matchPlayer(args[0]);
if (!online.isEmpty())
{
charge(user);
for (Player p : online)
{
p.getInventory().clear();
user.sendMessage(Util.format("inventoryClearedOthers", p.getDisplayName()));
user.sendMessage(_("inventoryClearedOthers", p.getDisplayName()));
}
return;
}
throw new Exception(Util.i18n("playerNotFound"));
throw new Exception(_("playerNotFound"));
}
else
{
Player p = server.getPlayer(args[0]);
if (p != null)
{
charge(user);
p.getInventory().clear();
user.sendMessage(Util.format("inventoryClearedOthers", p.getDisplayName()));
user.sendMessage(_("inventoryClearedOthers", p.getDisplayName()));
}
else
{
throw new Exception(Util.i18n("playerNotFound"));
throw new Exception(_("playerNotFound"));
}
}
}
else
{
charge(user);
user.getInventory().clear();
user.sendMessage(Util.i18n("inventoryCleared"));
user.sendMessage(_("inventoryCleared"));
}
}
@Override
protected void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception
protected void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
if (args.length < 1)
{
@@ -77,11 +70,11 @@ public class Commandclearinventory extends EssentialsCommand
for (Player p : online)
{
p.getInventory().clear();
sender.sendMessage(Util.format("inventoryClearedOthers", p.getDisplayName()));
sender.sendMessage(_("inventoryClearedOthers", p.getDisplayName()));
}
return;
}
throw new Exception(Util.i18n("playerNotFound"));
throw new Exception(_("playerNotFound"));
}
else
{
@@ -89,11 +82,11 @@ public class Commandclearinventory extends EssentialsCommand
if (u != null)
{
u.getInventory().clear();
sender.sendMessage(Util.format("inventoryClearedOthers", u.getDisplayName()));
sender.sendMessage(_("inventoryClearedOthers", u.getDisplayName()));
}
else
{
throw new Exception(Util.i18n("playerNotFound"));
throw new Exception(_("playerNotFound"));
}
}
}
@@ -1,32 +1,52 @@
package com.earth2me.essentials.commands;
import org.bukkit.Server;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IUser;
public class Commandcompass extends EssentialsCommand
{
public Commandcompass()
{
super("compass");
}
@Override
public void run(Server server, User user, String commandLabel, String[] args) throws Exception
public void run(final IUser user, final String commandLabel, final String[] args) throws Exception
{
charge(user);
int r = (int)user.getCorrectedYaw();
final int bearing = (int)(user.getLocation().getYaw() + 180 + 360) % 360;
String dir;
if (r < 23) dir = "N";
else if (r < 68) dir = "NE";
else if (r < 113) dir = "E";
else if (r < 158) dir = "SE";
else if (r < 203) dir = "S";
else if (r < 248) dir = "SW";
else if (r < 293) dir = "W";
else if (r < 338) dir = "NW";
else dir = "N";
user.sendMessage(Util.format("compassBearing", dir, r));
if (bearing < 23)
{
dir = "N";
}
else if (bearing < 68)
{
dir = "NE";
}
else if (bearing < 113)
{
dir = "E";
}
else if (bearing < 158)
{
dir = "SE";
}
else if (bearing < 203)
{
dir = "S";
}
else if (bearing < 248)
{
dir = "SW";
}
else if (bearing < 293)
{
dir = "W";
}
else if (bearing < 338)
{
dir = "NW";
}
else
{
dir = "N";
}
user.sendMessage(_("compassBearing", dir, bearing));
}
}
@@ -0,0 +1,59 @@
package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.perm.Permissions;
import java.util.Locale;
import lombok.Cleanup;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class Commanddelhome extends EssentialsCommand
{
@Override
public void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
if (args.length < 1)
{
throw new NotEnoughArgumentsException();
}
@Cleanup
IUser user = sender instanceof Player ? ess.getUser((Player)sender) : null;
String name;
String[] expandedArg;
//Allowing both formats /sethome khobbits house | /sethome khobbits:house
final String[] nameParts = args[0].split(":");
if (nameParts[0].length() != args[0].length())
{
expandedArg = nameParts;
}
else
{
expandedArg = args;
}
if (expandedArg.length > 1 && (user == null || Permissions.DELHOME_OTHERS.isAuthorized(user)))
{
user = getPlayer(expandedArg, 0, true);
name = expandedArg[1];
}
else if (user == null)
{
throw new NotEnoughArgumentsException();
}
else
{
name = expandedArg[0];
}
//TODO: Think up a nice error message
/*
* if (name.equalsIgnoreCase("bed")) { throw new Exception("You cannot remove the vanilla home point"); }
*/
user.acquireWriteLock();
user.getData().removeHome(name.toLowerCase(Locale.ENGLISH));
sender.sendMessage(_("deleteHome", name));
}
}
@@ -1,23 +1,19 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.Util;
import org.bukkit.Server;
import static com.earth2me.essentials.I18n._;
import org.bukkit.command.CommandSender;
public class Commanddeljail extends EssentialsCommand {
public Commanddeljail() {
super("deljail");
}
public class Commanddeljail extends EssentialsCommand
{
@Override
protected void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception {
protected void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
if (args.length < 1)
{
throw new NotEnoughArgumentsException();
}
charge(sender);
ess.getJail().delJail(args[0]);
sender.sendMessage(Util.format("deleteJail", args[0]));
ess.getJails().removeJail(args[0]);
sender.sendMessage(_("deleteJail", args[0]));
}
}
Loaded 100 of 642 files, more files were not shown because too many files have changed in this diff. Show more